__weak typeof(self) weakSelf = self;
self.handler = ^{
typeof(weakSelf) strongSelf = weakSelf;
[strongSelf.obserable removeObserver:strongSelf
forKeyPath:kObservableProperty];
};
问题:weak之后在strong,不还是循环引用么?
从引用计数解释:__weak指针之后,block对self不在强应用,strong weakSelf之后,self的引用计数加一,block执行结束之后,self的引用计数减一
如果block内部直接应用self,将在block初始化的地方,截获自动变量,生成一个strong指针指向self,如果block此时是成员变量,将会导致循环引用
举个形象的例子:weak strong dance之后,把block视为另外一个对象,strong weakself相当于在对象内部建立了个局部变量,直接引用self相当于 block内部建立了个成员变量
网友评论