自動解放されたオブジェクトを保持するとどうなるか知っていますか? それはリリースされますか、それとも保持が勝ちますか?
3 に答える
自動解放されたオブジェクトを保持するとどうなるか知っていますか? それはリリースされますか、それとも保持が勝ちますか?
「retain
勝つ」が、そう考えると失敗だらけ。
保持と解放は、オブジェクトの保持カウントを増減するメカニズムにすぎません。自動リリースは単なる遅延リリースです。それ以上でもそれ以下でもありません。
自動解放されたオブジェクトを保持する場合、現在保持カウントを増やしていますが、保持カウントは後で減少します。これは常に発生します。 イベントループを通過する現在のパスを超えて[最も一般的に]保持したい場合[NSString stringWithFormat: @"...."]
は、自動解放された文字列を返します。retain
変数を維持したい場合は、それを保持する必要があります。例えば:
myButton = [[UIButton buttonWithType:...] retain];
このbuttonWithType:
メソッドは、UIButton
でインスタンス化された を返しますautorelease
。必要に応じて (いわば) 自分自身を解放します。
リテインが勝ちます。これは非常に一般的であり、例外的な方法です。
通常、便利なメソッドは次のような自動解放されたオブジェクトを返します
[NSString stringWithFormat:@""];
後で解放することを忘れない限り、必要なオブジェクトはすべて保持することが期待されます。
自動解放は、現在のシステム メッセージの最後で行われることに注意してください。
以下の記事から: 「システムによって処理されるメッセージごとに自動解放プールが作成され、そのメッセージの処理が完了した後、プール内のオブジェクトはすべて自動的に解放されます。」
これに関するいくつかの優れた説明は、次の場所にあります。
http://www.iphonedevsdk.com/forum/iphone-sdk-tutorials/7295-getters-setter-properties-newbie.html