29,031
社区成员
发帖
与我相关
我的任务
分享
NSLog(@"%@", innerSelf.ob1);
self.block = ^{
NSLog(@"%@", self.ob1);
};
这段代码,编译器会将代码块中的self.ob1看作是self->ob1,block会捕获你的self而不是ob1,这个是规则。
你自身就拥有这个block作为实例变量,又在这个block中强引用self,自然就是强引用循环了。
要想改写的话,楼上说的不全面,不仅要在block外改变self为弱引用,还要防止弱引用的对象随时被释放而使用局部强引用。
__weak Class * weakSelf = self;
self.block = ^{
Class * innerSelf = weakSelf;
NSLog(@"%@", self.ob1);
};
不知理解了没有。。。