奇妙なリークに直面しています。Car
次のクラスのオブジェクトは決して割り当て解除されません。
ただし、インスタンス変数を取り除き、_unsafe_self
代わりにメソッド内で変数を宣言 (および以前のように代入)init
すると、リークはなくなります。
何が原因でしょうか? __weak
インスタンス変数であろうとなかろうと、いつも弱いと思っていました。
@interface Car : NSObject
@end
@implementation Car {
id _obs;
__weak Car *_unsafe_self;
}
- (id)init {
if (!(self = [super init]))
return nil;
_unsafe_self = self;
_obs = [[NSNotificationCenter defaultCenter]
addObserverForName:NSWindowDidMoveNotification
object:nil
queue:[NSOperationQueue mainQueue]
usingBlock:^(NSNotification *note) {
NSLog(@"hello %@", _unsafe_self);
}];
return self;
}
- (void)dealloc {
[[NSNotificationCenter defaultCenter] removeObserver:_obs];
}
@end