弱自我作为iVar



我知道你应该在块中使用weakSelf,这可能会在自己生存以避免保留记忆周期。喜欢:

__weak id weakSelf = self;
self.block = ^{
    [weakSelf something];
}

但我试图找到一种通用的方法。我可以使用这样的宏:

#define Weakify(o) __weak __typeof__((__typeof__(o))o)
#define WeakifySelf(o) Weakify(self) o = self;
WeakifySelf(weakSelf)
self.block = ^{
    [weakSelf something];
}

这简化了,但我想知道为什么我不能在我的视图控制器上使用 ivar。

@interface YDViewController : UIViewController
{
    __weak id _weakSelf;
}

然后使用此 iVar

self.block = ^{
    [_weakSelf something];
}

知道吗?

使这个想法沉没的问题是,在引擎盖下,[_weakSelf something][self->_weakSelf something]完全相同。

因此,即使您尝试使用弱引用

,最终也会使用强引用来获取弱引用并捕获两者。

相关内容

  • 没有找到相关文章

最新更新