1

まったく基本的な質問で申し訳ありませんが、保持されている合成プロパティがある場合。

 self.myProperty = [[NSObject alloc] init];

メモリリークが発生しますか?

そうする必要があると考えるのは正しいですか

self.myProperty = [[NSObject alloc] init];
[self.myProperty release];

バランスをとるために?それはばかげているように見えるからです。

4

4 に答える 4

2

autoreleaseそのような状況で使用するのが標準的な方法です。そう:

self.myProperty = [[[NSObject alloc] init] autorelease];

これはinit、保持されたオブジェクトを返すためであり、プロパティもそれを保持するため、解放する必要があります。

追加するために編集: @walkytalky は、実際にallocはオブジェクトを保持し、initそれを返すだけであることをコメントで適切に指摘しています。

于 2012-06-19T21:46:19.617 に答える
0

これが役立つスレッドです。

あなたは正しいです。ARCがない場合、保持されているプロパティもすべて解放する必要があります。

次のこともできます。

self.myProperty = nil;

ドキュメントから:

保持

割り当て時にオブジェクトに対してretainを呼び出す必要があることを指定します。

前の値にはリリースメッセージが送信されます。

于 2012-06-19T21:44:06.720 に答える
0

もう 1 つの (より冗長な) 手法は次のとおりです。

NSObject *o = [[NSObject alloc] init]; //retain count 1
self.myProperty = o;                   //retain count 2
[o release];                           //retain count 1

個人的には、上記の最初の例のように autorelease を使用したいと思います。

于 2012-06-20T00:20:33.970 に答える
0

ARC を有効にすると、xcode がすべてのメモリ管理を処理します。ARC を使用しない場合は、必ず dealloc メソッドで解放してください。

于 2012-06-19T21:14:55.027 に答える