2012-03-19 7 views
0

(私の英語:-) のため申し訳ありません私は、カスタムのUITableViewCellをロードしていますこのセルのために、その内部にコンセントを持っていたいと思っています。それは、UITableViewControllerではなく自分のファイルです。それは大丈夫です。カスタムUITableViewCellの、自動解放およびその他の方法

私の質問は、この状況で正しいメモリ管理についてです。

私はloadNibNamedがオートレリースされた配列を返すことを理解します。 また、自動解放プールが現在のループの最後に排水されていることを理解しています。 このため、カスタムセルを返す前に保持する必要はありません。

しかし、オートレリースされたオブジェクトは、オートレリースが送信されたメソッドの終わりまでしか存在しないことが保証されていると、あなたは思っています。 これを仮定すると、私はすぐに、細胞を保持し、それを自動解放する必要があります

cell = [[(ReminderCell *)currentObject] retain]; 
//code... 
[cell autorelease]; 
return cell; 

は、この正しいですか、私はこのことを心配べきではないのですか? ありがとう

+0

[(ReminderCell *)currentObject] retain];そうでなければ、間違って他のセル(例えばデキューされたセル)を過剰にリリースする可能性があります。 – LombaX

答えて

0

これは必須ではありません。オブジェクトはguaranteed to live only until the end of the method where the autorelease was sentではありません - メソッドはここでは無関係です。オブジェクトは、autoreleaseメソッドによって追加された自動解放プールが排水された後で解放されます。あなたのメソッドに自動解放プール管理がないので、currentObjectは実行中にreleaseを受け取らないでしょう。例えば

(もちろんARCなし):あなたのケースで

id obj; 
NSAutoreleasePool *pool = [NSAutoreleasePool new]; 
... 
obj = [other object]; 
... 
[pool drain]; 

[obj doSomething]; // DANGEROUS 

それはのようなものです:申し訳ありませんが、明らかに自動解放は、[すぐにセル=の後に、もし内にある必要があります

id obj; 
... 
obj = [other object]; 
... 
[obj doSomething]; // SAFE 
+0

ありがとう、すべてがクリアです! :-) – LombaX

関連する問題