Want to perform action when __weak ivar is niled

前端 未结 3 1782

I have a @class Foo which contains a __weak id bar ivar. Several actions from methods in different classes can cause the object to disappear and th

3条回答
  •  青春惊慌失措
    2021-01-18 02:51

    I was led here by a duplicate question, here is what I answered:

    You can't do that with KVO, but you can still get a notification and emulate this by associating an object with your iVar using objc_setAssociatedObject(), it will be deallocated when the weak variable dies.

    @interface WeakObjectDeathNotifier : NSObject
    @end
    @implementation WeakObjectDeathNotifier
    - (void)dealloc
    {
        // the code that shall fire when the property will be set to nil
    }
    @end
    

    You can build on top of that very elaborate notifiers, using NSNotificationCenter or just custom blocks, depending on how heavily you rely on that for a specific ivar case or for lots of them.

    The good thing about this solution is that it works with any __weak ivar, even if you don't control the type the __weak ivar has.

提交回复
热议问题