В этом методе номер строки я должен распределять каждый раз, когда он вызывается?
Используя другие ответы на этом форуме, я создал этот метод класса, чтобы определить, является ли строка числом. Это работает хорошо, но я должен выделить-init каждый раз, когда он вызывается? В конце концов, если бы это был не XCode4, это было бы утечкой памяти, не так ли? Обратите внимание, я использую XCode4, который имеет автоматический счетчик ссылок, который предотвратит это.
Я надеялся сделать что-то вроде
if this is not alloc-initted then alloc-init
но не могу заставить его работать.
Метод в нынешнем виде
+ (BOOL)isThisANumber:(NSString *)candidate{
NSNumberFormatter *fmtr = [[NSNumberFormatter alloc] init];
[fmtr setNumberStyle:NSNumberFormatterDecimalStyle];
NSNumber *myNumber = [fmtr numberFromString:candidate];
if ( myNumber== nil) {
return NO;
}
else{
return YES;
}
1 ответ
Если потокобезопасность не является проблемой, вы всегда можете сделать что-то вроде этого:
static NSNumberFormatter *fmtr;
if (fmtr==nil)
{
fmtr=[[NSNumberFormatter alloc] init];
[fmtr setNumberStyle:NSNumberFormatterDecimalStyle];
}
NSNumber *myNumber = [fmtr numberFromString:candidate];
if ( myNumber== nil) {
return NO;
}
else{
return YES;
}
И между прочим, ваш оригинальный код теряет память:-) Он выделяет новый форматер каждый раз, когда он вызывается, и никогда не освобождает его.