我有一个@class Foo
其中包含一个__weak id bar
伊瓦尔。不同类中方法的多个操作可能导致对象消失,从而得到bar
niled.
我想在 ivar 被 ARC 自动清除时执行一个操作。
如果可以的话,我想避免转弯bar
进入属性或使用键值观察。
这可能吗?如果不是,KVO 可以用于对抗非财产 ivars 吗?
我被一个重复的问题引导到这里,这是我的回答:
您无法使用 KVO 做到这一点,但您仍然可以获得通知并通过使用以下命令将对象与您的 iVar 关联来模拟这一点:objc_setAssociatedObject()
,当弱变量消亡时它将被释放。
@interface WeakObjectDeathNotifier : NSObject
@end
@implementation WeakObjectDeathNotifier
- (void)dealloc
{
// the code that shall fire when the property will be set to nil
}
@end
您可以在非常复杂的通知程序之上构建,使用NSNotificationCenter
或者只是自定义块,具体取决于您对特定 ivar 情况或大量情况的依赖程度。
该解决方案的好处是它适用于任何__weak
ivar,即使你不控制类型__weak
伊瓦尔有。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)