弱引用难题

Weak references conundrum

假设我想创建一个弱引用,这样它就不会被块保留。所以我有一个 属性:

@property (nonatomic, strong) MyClass *myObject;

我这样做:

__weak typeof(self.myObject) myObjectWeak = self.myObject;

void (^doSomething)() = ^void() {
   [myObjectWeak doSomething];    
};

但是这个呢:

__weak typeof(self) selfWeak = self;

void (^doSomething)() = ^void() {
   [selfWeak.myObject doSomething];    
};

这会产生同样的效果吗?我的意思是在块内对 myObject 的引用很弱?我怀疑不是,但我需要确认一下。

是的,在最后一个例子中使用 selfWeak 足以打破强引用循环。不用担心您在那里引用了它的属性。