autoreleaseプールに保持されているオブジェクトへの強い参照または弱い参照が保持されているのだろうかと思います。私は彼らが弱いと思うだろう。自動解放プールにオブジェクトを追加すると、ただちにリリースされるのではなく、プールが空になったときに解放されます。したがって、リファレンスは弱いはずです。つまり、オブジェクトを自動解放プールに追加すると、参照カウント(または保持カウント)は同じに保たれますか?自動解放プールのオブジェクトはどのように参照されますか?
答えて
はい。それがそうであると、カウントが同じ続けて保持し、ヨーヨーを確認することができますすることができます:自動解放プールの
id obj = [[NSObject alloc]init];
NSLog([NSString stringWithFormat: @"%d", [obj retainCount]]);
[obj autorelease];
NSLog([NSString stringWithFormat: @"%d", [obj retainCount]]);
全体のポイントは、それが延期リリースであるということです。たとえば、メソッドで返されるローカルオブジェクトに対してautoreleaseを呼び出すことで、メソッドが返されたときにオブジェクトへの参照が失われても解放されるようにすることができます。
強参照と弱参照の対話は、ガベージコレクションされたメモリ管理環境(weakポインタが自動的に解放され、参照されてもクリアされる)のコンテキストで意味があります。 GCを有効にすると、すべてのretain/release/autorelease呼び出しは基本的に何も操作しません(ただし、NSAutoreleasePool -drainメソッドはガベージコレクションをトリガーします)。
この質問にiPhone関連のタグが付いているので、iPhoneにガベージコレクションはありません。私はあなたが通常の参照カウントを参照していると仮定しています。弱い場合はポインタ値を格納するだけです。
autorelease
メソッドは、オブジェクトの所有権を呼び出し元のコードから現在の自動解放プールに移動するため、呼び出し元コードと解放呼び出しを考えることができます。
したがって、参照は効果的ですが、コードが所有権を失い、責任を解放します。オブジェクトrelease
は、自動解放プールが解放/排水されたときに呼び出されます。
保持カウントは同じですが、基本的にオブジェクトに自動解放メッセージを送信すると、開発者は所有権と解放の責任を免れます。
これは自動解放プールの動作です。 自動解放プールのインスタンスが作成されるたびに、スタックの最上位に追加されるため、最新の自動解放プールがシステムによって使用されます。また、自動解放プールにオブジェクトを追加するたびに、スタック内の一番上の自動解放プールに追加されます。自動解放プールは、基本的に、自動解放されたオブジェクトが追加される配列です。 autoreleaseプールに追加されたすべてのオブジェクトは、その特定の自動解放プールが解放されたときに解放されます(/ドレイン)。自動解放プールは、システムがイベントの処理を開始する前に最初に作成され、現在のイベントループの実行が終了するまでそこに残ります。システムが現在のイベントループが完了したら、そのイベントループに関連付けられた一番上の自動解放プールを取得して解放します。 autorelease pool/drainingを解放すると、autoreleaseプール内のすべてのオブジェクトが解放されるまで、各オブジェクトがautoreleaseプールに追加され、オブジェクトにreleaseメッセージが送信されます。
- 1. 自動解放プールのスコープ
- 2. 自動解放プールのデバッグ
- 3. 自動解放プールがクラッシュするアプリケーション
- 4. なぜオブジェクトは自動解放プールによって収集されませんか?
- 5. 自動解放プール。排水と保持
- 6. マルチスレッドと自動解放のプールは、Cocoaで一緒に動作しますか?
- 7. 複数参照オブジェクトの解放
- 8. __weakオブジェクトが自動解放プールに追加されるのはなぜですか?
- 9. 現在の自動解放プールが排水されていると、起動された障害はメモリから解放されますか?
- 10. 自動解放プールによって割り当てられたメモリを完全に解放するにはどうすればいいですか?
- 11. すべてのクラスメソッドは自動解放されたオブジェクトを返しますか?
- 12. すべてのスレッドで独自の自動解放プールが必要ですか?
- 13. Objective-c:メソッドから自動解放されたオブジェクトを返す
- 14. EGLContextリソースは自動的に解放されますか?
- 15. 実行ループの最後 - 自動解放プールの回復
- 16. JOGLで自動解放プールがありません
- 17. メモリからのjni参照の解放
- 18. 自動解放されたオブジェクトを非自動に変更する
- 19. Objective Cの自動参照カウントはどのように機能しますか?
- 20. オブジェクトはJavaScriptでどのように参照できますか?
- 21. 保持/解放 - 参照数
- 22. Obj-C、参照カウントオブジェクトは解放後に使用されますか?
- 23. 関数がオブジェクトを作成して返しても、それは自動解放プールにあるはずです
- 24. cocos2dオブジェクトをどのように解放するのですか?
- 25. iOS main.mテンプレートにreturn文と自動解放プールが含まれているのはなぜですか?
- 26. 自動参照カウントで自己を解放するための新しいパターンは何ですか?
- 27. オブジェクトが既に参照されているかどうかはどのように知りますか?
- 28. 完了前にObj-C自動解放ネットワークリクエストが解放されました
- 29. どのようにnullオブジェクトの参照を解決するには?
- 30. 自動レイアウト参照オブジェクトを変更するにはどうすればよいですか?