clo*_*sen 4 objective-c key-value-observing ios
我读过有关KVO 的苹果文件,它说:
注意:键值观察addObserver:forKeyPath:options:context:方法不保持对观察对象,观察对象或上下文的强引用.您应该确保在必要时保持对观察,观察对象和上下文的强引用.
观察者对象没有对观察对象的强引用.
这个男人我不能打电话给removeObserver:forKeyPath:这个dealloc方法吗?可以自动删除观察者吗?
Guo*_*uan 10
你必须打电话给-removeObserver:forKeyPath:manaully.iOS不会自动执行此操作.
苹果说does not maintain strong references to the observing object.我认为这意味着,如果你想从temp var的范围中删除临时变量的onObserver,你应该将temp var设为ivar,这样你就可以维护ivar的强引用.
如果你不打电话-removeObserver:forKeyPath:.你会做:1)有什么东西泄漏
比如像这样的代码:
[self addObserver:a forKeyPath:@"name" options:NSKeyValueObservingOptionNew context:nil];
Run Code Online (Sandbox Code Playgroud)
如果你不打电话-removeObserver:forKeyPath:.它将控制:
Run Code Online (Sandbox Code Playgroud)An instance 0x756a1d0 of class MyClass was deallocated while key value observers were still registered with it. Observation info was泄露,甚至可能被错误地附着在其他物体上.在NSKVODeallocateBreak上设置断点以在调试器中停止.这是当前的观察信息:[NSKeyValueObservationInfo 0x7574f60]([NSKeyValueObservance 0x7574f20:Observer:0x7568280,Key path:pageCount,Options:[New:YES,Old:NO,Prior:NO] Context:0x0,Property:0x7574fa0])
当你调试它时,你会发现:self并且a没有泄漏.漏水的是NSKeyValueObservationInfo object
如果你不打电话-removeObserver:forKeyPath:.您将:2)中级类永远不会破坏&&无限通知
正如关于KVO的Apple文档所说:
当观察者注册对象的属性时,观察对象的isa指针被修改,指向中间类而不是真正的类.
当您删除Observer时,如果没有注册观察者,则中间类将销毁.如果不调用removeObserver,则中间类永远不会销毁,当您更改属性时,中间类的setter方法将继续发送通知.
| 归档时间: |
|
| 查看次数: |
6294 次 |
| 最近记录: |