自動解放を自動解放だろうが、このから抜け出すための簡単な方法です。ただし、返すオブジェクトの「所有権」を考慮する必要があります。
Objective-Cで
は、一般的な経験則は、その名前にalloc
、new
、又はcopy
との任意の方法は、自動解放されていないオブジェクトを返すことがあり、一方(クラスメソッドのような)他の方法にプリ自動解放オブジェクト返される。 (コンパイラは、いくつかの魔法を行うと、とにかく文字列定数にそれらすべてを減らすかもしれないが)ので、これらの3つの自動解放の面で等価ではありません。
// Autoreleased
NSString *string1 = [NSString stringWithString:@"aString"];
NSString *string2 = [[[NSString alloc] initWithString:@"aString"] autorelease];
// NOT autoreleased
NSString *string3 = [[NSString alloc] initWithString:@"aString"];
あなたがオブジェクトの所有者を考慮し、同様のアプローチを取ることができ、あなたのコードあなたは戻ってきます。あなたが指定した特定の例では、メソッドはオブジェクトであるalloc
とinit
です。したがって、一般的にはあなたのメソッド内でautorelease
を実行する必要があります。ただし、既存のオブジェクトを取り込み、それを何らかの方法で変更するメソッドを記述する場合は、そのオブジェクトを所有しておらず、返されたオブジェクトの自動解放には責任を負いません。 (への自動解放プールは、オブジェクトを排水ます属している場合そうすることで、実際に道路ダウンの問題を引き起こす可能性があります。)
も参照してください(コメント欄にピーターとクインのおかげで!):
出典
2009-08-09 05:06:28
Tim
こんにちは、{NSThing * thing = [[NSthing alloc] init] autorelease];返すもの;}ここではどうしたらいいですか? – onlinenaman
@onlinenaman:yes – newacct