簡體   English   中英

作為iVar的weakSelf

[英]weakSelf as an 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];
}

這簡化了,但是我想知道為什么我不能在viewController上使用ivar。

@interface YDViewController : UIViewController
{
    __weak id _weakSelf;
}

然后使用這個iVar

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

任何想法?

引起這個想法的問題是[_weakSelf something][_weakSelf something][self->_weakSelf something]

因此,即使您嘗試使用弱引用,您最終還是要使用強引用來獲取弱引用並捕獲兩者。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM