弱い引数を使用する小さな例を次に示します。
@interface MYTestObject : NSObject
@end
@implementation MYTestObject {
void(^_block)(void);
}
- (void)dealloc {
NSLog(@"DEALLOC!");
}
- (id)init {
if (self = [super init]) {
[self doSomethingWithObject:self];
}
return self;
}
- (void)doSomethingWithObject:(id __weak /* <- weak argument! */)obj {
_block = ^{
NSLog(@"%p", obj);
};
}
@end
そしてそれは動作します:-dealloc
と呼ばれます! また、削除する__weak
と保持サイクルが発生し、それは完全に正しいです。
それが単なる副作用であり、弱い引数を使用するのは完全に安全ではないのだろうか? それとも、特定の動作で、私はただの悪い Google ユーザーですか?