「私は ARC の専門家ではないことを認め、サイクルを保持していますが、いくつかの研究といくつかの優れた記事 (このようなもの) を通じて、基本を理解したと信じています.
しかし、私は現在困惑しています。次のように定義されたプロパティがあります。
@property (nonatomic,retain) Foo *foo;
私の中でinit
、私は次のことを行います。
if(self = [super init]) {
_foo = [[Foo alloc] initWithDelegate:self];
// async the rest
__weak typeof(self) weakSelf = self;
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,
(unsigned long)NULL), ^(void) {
__strong typeof(weakSelf) strongSelf = weakSelf;
if (strongSelf.foo != nil) {
[strongSelf.foo runTests];
}
});
}
return self;
}
そして、ここに私のdeallocがあります
- (void)dealloc {
_foo = nil;
}
dispatch_aync
ブロックがコメントアウトされている場合、dealloc
foo が に設定された直後に Foo が呼び出されることがわかりnil
ます。ブロックがコメントインされているため、foodelloc
は呼び出されません。
リテインサイクルは正しいですか?方法はありますか?