2011-06-01 13 views
-1

メモリ管理に関してこのコードは大丈夫でしょうか?あなたの答えのための@properties - メモリ管理

@property (nonatomic, retain) id object; 
... 
id anObject = [[Object alloc] init]; 
self.object = anObject; 
id otherObject = [[Object alloc] init]; 
self.object = otherObject; 

おかげで、 クリスチャン

答えて

2

第プロパティ記述子が示すように、それが割り当てられているとき、そのオブジェクトを保持します。つまり、オブジェクトを割り当てているときは、オブジェクトを割り当てた時点でオブジェクトを2つ保持して、self.objectに割り当てます。だからあなたはそれを解放しなければならない:

@property (nonatomic, retain) id object; 
... 
id anObject = [[Object alloc] init]; 
self.object = anObject; 
[anObject release]; 

id otherObject = [[Object alloc] init]; 
self.object = otherObject; 
[otherObject release]; 
... 
at dealloc: 
self.object = nil; 

幸運!

+0

私は利用可能なときに便利なメソッドを使うことを好みます。そうでない場合は、私はいつも[[[Class alloc] init] autorelease]を行います。奇妙に見えるオブジェクトをリリースする追加のラインを持つよりもきれいに見えます。しかし、それは味の問題だと思います。 –

+2

また、自動リリースされたオブジェクトの作成の問題です。 OPのコードがタイトなループになっていたとしましょう。オートレリーズされたメモリをたくさんビルドするよりも、明示的にリリースするほうがはるかに良いでしょう。 – kevboh