私は、サイクルを保持することについて少し混乱しています。写真が示すように、それは保持サイクルです。私の意見は、スコープを使い果たしたときに、test0がリリースされ、obj_が解放されるため、オブジェクトAおよびBの参照カウントが1つで、これがtest1で起きたときも参照カウントはゼロになり、最後にメモリを解放します。何が問題なのですか?割り当てTEST0際 enter image description here enter image description hereサイクルリークメモリを保持するのはなぜですか?
0
A
答えて
1
はローカル基準によって保持され、TEST1のsetObjectメソッドのTEST0の呼び出しがTEST0のローカル参照すると2のカウントを保持する範囲外通過TEST0オブジェクトのをした後に1のカウントを保持しています参照カウントは1だけデクリメントされ、1になります。 test1についても同じことが言え、両方とも参照カウント1が残っています。
オブジェクトの保持カウントがデクリメントされる度に間違っていると思われるかもしれません。厳密には真実ではありません。 test0は自身が解放されるまで参照カウント1でオブジェクトobjを「ホールド」します。オブジェクトが1を参照するので、別の彼らの数が下回ることはありません。1.
@interface Test : NSObject
{
id __strong obj_;
}
-(void)setObject:(id __strong) obj_;
@end
@implementation Test
-(id)init
{
self=[super init];
return self;
}
-(void)setObject:(id __strong) obj
{
obj_ = obj;
}
@end
// ...
id test0 = [[Test alloc] init];
NSLog(@"test0 etain count is %ld", CFGetRetainCount((__bridge CFTypeRef)test0)); // 1
id test1 = [[Test alloc] init];
[test0 setObject: test1];
[test1 setObject: test0];
NSLog(@"test0 retain count is %ld", CFGetRetainCount((__bridge CFTypeRef)test0)); // 2
スコープ外に実行しているとき、私は考える前に
関連する問題
- 1. なぜcantサブクラスオブジェクトがスーパークラスコンストラクタを保持するのですか
- 2. なぜ静的変数を保持するのですか?
- 3. ARCはメソッド引数を保持するのはなぜですか?
- 4. なぜこの置換はPrologで保持されますか?
- 5. Objective-Cオブジェクトフィールドを保持する必要があるのはなぜですか?
- 6. 私のフォームはサイズを保持しないのはなぜですか?
- 7. @classmethodは@staticmethodがクラス間で保持されないのはなぜですか?
- 8. なぜbehatは異なるシナリオ間でリクエストヘッダーを保持しますか?
- 9. IEEE754フロートで+0.0> -0.0が保持されないのはなぜですか?
- 10. gccは読み込み中に呼び出し先保存レジスタを保持するのはなぜですか?
- 11. なぜapacheはphp-cliが仮想メモリアドレスを保持するメモリにオフセットを保持していますか?
- 12. このプロパティに「保持」が必要なのはなぜですか?
- 13. なぜこの選択ボックスの値を保持できないのですか?
- 14. なぜGitHubはAsciiDocで改行を保持しませんか?
- 15. iOS - NSURLがinitメソッドに保持されないのはなぜですか?
- 16. なぜ、フォルダではなく別のプロジェクトでテストを保持するのですか?
- 17. なぜKVOはNSMutableArrayのすべてのオブジェクトを保持していますか?
- 18. なぜProGuardでBuildConfigを保持する必要がありますか?
- 19. ステートフルな情報を保持するためにCookieが必要なのはなぜですか?
- 20. 共有ロックでアップグレード可能なロックを1つしか保持できないのはなぜですか?
- 21. なぜフィルタリング後にIOrderedEnumerableが順序を保持しないのですか
- 22. sys/queue.hの二重リンクリストは、前の次の要素のアドレスを保持するのはなぜですか?
- 23. なぜNumPy reshape()は新しい配列を作成するのですか?なぜ順序を保持しないのですか?
- 24. 'count'の値が異なる再帰間で保持されないのはなぜですか?
- 25. なぜリンカーはカプセル化を保持しませんか?
- 26. なぜaddSubviewはビューを保持していませんか?
- 27. ASP.NET - なぜ私のクッキーは保持されませんか?
- 28. initWithRootViewControllerは、渡されるviewControllerクラスを保持しないのはなぜですか?
- 29. なぜapolloは更新を保存しないのですか?
- 30. なぜキャメラはインフォメーションレポジトリ内の交換を保持していますか?
おかげで非常に多く、TEST0がリリースする、それはまたrelease.The事実はobjが解放されますされますOBJですオブジェクトが解放されたときだけです。 –
"test0は、自身が解放されるまで参照カウント1でobjを「保持」します。あなたは「それ自身が解約されるまで」という意味です。 – newacct