1

必要な共通機能を備えたユーティリティ クラスを作成したいと考えています。したがって、それらは静的である必要があり、メモリリークはありません。

NSString を NSNumber に変換するこの関数を追加したいとします。

NSNumberFormatter * f = [[NSNumberFormatter alloc] init];
[f setNumberStyle:NSNumberFormatterDecimalStyle];
NSNumber * myNumber = [f numberFromString:@"42"];
[f release];

リークせずに結果を返すにはどうすればよいですか?

これには自動リリースを使用する必要がありますか?

4

1 に答える 1

3

所有権が不明なオブジェクトを返す場合は、autoreleaseを使用してメモリ リークを回避します。NSNumbernumberFromString:メソッドはすでに自動解放された値を返すため、特別なことをする必要はありません。他のクラスのオブジェクトを使用すると、次のことができます。

MyClass *ret = [[[MyClass alloc] initWithSomeValue:42] autorelease];

ARC を使用する場合は、これを行う必要がないことに注意してください。コンパイラは、そのほとんどを理解するのに十分スマートです。

Objective C では、Java/C++/C# の静的メソッドはクラス メソッドと呼ばれます。+宣言では代わりにa を使用してそれらを示し-、実装からインスタンス メソッドにアクセスできないことに注意してください。

ヘッダー内:

@interface MyHelper : NSObject
+(NSString*)format:(NSNumber*)num;
@end

実装では:

@implementation MyHelper

+(NSString*)format:(NSNumber*)num {
    return [num stringValue];
}

@end
于 2012-07-05T18:32:30.463 に答える