オートレリースされたオブジェクトを保持するとどうなりますか? リリースされるのか、それとも勝ち残りますか?iPhone - オートリリース後に保持するとどうなりますか?
答えて
知っていますか? がリリースされるのか、それとも勝利は勝ちますか?
retain
「勝ち」とは思っていますが、そのように考えるのは失敗です。
retainおよびreleaseは、オブジェクトの保持カウントを増減するためのメカニズムに過ぎません。自動解放は単に遅延リリースです。もはや、それほどではありません。
オートレリースオブジェクトを保持している場合は、保持カウントを現在増加させていますが、保持カウントは後で減少します。これはいつも起こります。 [NSString stringWithFormat: @"...."]
は、自動ループした文字列を返します。これは、イベントループの現在のパスを超えてスクロールしたい場合はretain
です。
変数を保持したい場合は、にはが必要です。たとえば:
myButton = [[UIButton buttonWithType:...] retain];
buttonWithType:
方法はautorelease
でインスタンス化されていますUIButton
を返します。それは、必要なときにそれ自体を解放する(話すように)世話をするでしょう。
リテールが勝ちます。これは非常に一般的であり、例外的な習慣です。
通常の便利なメソッドが
[NSString stringWithFormat:@""];
などの自動解放オブジェクトを返すあまりにも長い間、あなたが後でそれらを解放することを忘れないように、あなたはあなたがする必要があるものは何でもオブジェクト保持することが期待されています。
現在のシステムメッセージの最後に自動リースが行われることに注意してください。
以下の記事から: "システムによって処理されるメッセージごとに自動解放プールが作成され、そのメッセージの処理が完了した後、プール内のオブジェクトはすべて自動的に解放されます。
本のいくつかの偉大な説明はここで見つけることができます:あなたは、私は自動解放オブジェクト を保持している場合、何が起こるか
http://www.iphonedevsdk.com/forum/iphone-sdk-tutorials/7295-getters-setters-properties-newbie.html
autoreleaseが現在の方法の終わりに(必然的に)起こるわけではないことを除いて、かなり良い答えです。オートレリースされたオブジェクトは、プールが排水されたときにのみ解放され、通常は実行ループを通るたびに1回しか発生しません。オートレリースされたオブジェクトは、長時間張り付く可能性があります。 – kubi
@ kubi:記事iから、 "システムで処理されるメッセージごとに自動解放プールが作成され、プール内のオブジェクトはすべて、そのメッセージの処理が完了した後に自動的に解放されます。私は現在のメッセージを意味しませんでした、私は現在のシステムメッセージを意味しました。私は私のポストを修正します。 –
「現在のシステムメッセージ」は概念的には正しいですが、より正確な用語は「現在のイベント」です。通常は「現在のイベントは実行ループによって処理されています。GCDキューは、キューごとに自動解放プールも管理することがあります(場合によってはそれ以上の場合もあります)。ただし、排出量は実行ループよりもはるかに決定的ではありません。 – bbum
- 1. オートリリースとセレクタ
- 2. プッシュ後にリベースするとどうなりますか?
- 3. Backboneモデルを保存するとどうなりますか?
- 4. iPhoneの再起動後にコアデータがデータベースを保持しない
- 5. インタフェースビルダーから同じビューを追加するとどうなりますか? - iPhone
- 6. SQLiteクエリの後にCursorを使用するとどうなりますか?
- 7. スマートポインタが保持するオブジェクトが他の場所で削除されるとどうなりますか?
- 8. ドラフトを保存するとiphone inAppのメールに時間がかかります
- 9. iPhone、選択画面にpushViewControllerを使用すると、値はどのように保持する必要がありますか?
- 10. IPhone開発プログラム:どうなりますか?
- 11. 長命オブジェクトのステートレスEJBへの参照を保持するとどうなりますか?
- 12. Objective Cリリース、オートリリース、データタイプ
- 13. ファイルの保存ダイアログでキャンセルをクリックするとどうなりますか? (Javascript)
- 14. VIMを使用してファイルを保存するとどうなりますか?
- 15. iphoneでカウントを保持する
- 16. XMLStreamReader - ファイルの最後にはどうなりますか?
- 17. 「return Json(myObject);」の後にはどうなりますか?
- 18. アプリのアップデート後にアクティビティのライフサイクルはどうなりますか?
- 19. CGAffineTransform(回して)後view.frame.size属性にどうなりますか?
- 20. pthread_createの後にpthread_tはどうなりますか?
- 21. onPause後にAsyncTasksはどうなりますか?
- 22. フォームのチェックボックスは、サブミットとページのリロード後にどのように状態を保持できますか?
- 23. 1日あたり多くのレコードのうち1つだけがレールに保持されます。最後に保持する、残りを削除する
- 24. iPhoneにplistを保存するにはどうすればよいですか?
- 25. ユニコードを保持する.htmlのような機能はありますか?
- 26. どのように静的変数は保持されますが、Object.toStringハッシュコードは異なりますか?
- 27. オブジェクトのグローバルキャッシュをどのように維持できますか? (またはコンテンツを保持しないNSMutableSet)
- 28. GridViewRowの値はどのように保持できますか?
- 29. logging.exceptionはどのように例外を保持しますか?
- 30. managedObjectContextを別のスレッドから保存しようとするとどうなりますか?
最も簡単な方法は、試してみることです。コードを修正し、ビルドして実行します。あなたの所見を教えてください。 %) –