0

このフォーラムの他の回答を使用して、このクラスメソッドを作成して、文字列が数値かどうかを判断しました。問題なく動作しますが、呼び出されるたびに alloc-init を実行する必要がありますか? 結局のところ、これが XCode4 ではない場合、メモリ リークが発生するのではないでしょうか? NB、私はそれを防ぐ自動参照カウンターを持つ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;
    }
4

1 に答える 1

0

スレッドセーフが問題にならない場合は、いつでも次のようなことができます。

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;
}

そしてところで、元のコードはメモリリークを起こします:-)呼び出されるたびに新しいフォーマッタを割り当て、解放することはありません。

于 2012-08-28T12:54:17.477 に答える