В этом методе номер строки я должен распределять каждый раз, когда он вызывается?

Используя другие ответы на этом форуме, я создал этот метод класса, чтобы определить, является ли строка числом. Это работает хорошо, но я должен выделить-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;
}

И между прочим, ваш оригинальный код теряет память:-) Он выделяет новый форматер каждый раз, когда он вызывается, и никогда не освобождает его.

Другие вопросы по тегам