【发布时间】:2018-09-12 11:05:22
【问题描述】:
这是我的代码:
NSLog(@"%p",self);
__weak typeof(self) weakSelf = self;
NSLog(@"%p", weakSelf);
[self setBlk:^{
__strong typeof(weakSelf) strongSelf = weakSelf;
NSLog(@"%p", strongSelf);
strongSelf.str = @"foo";
}];
self.blk();
blk 和 str 是财产。
我得到了这样的日志:
2018-04-03 14:51:57.151946+0800 Block[20267:148833] 0x7fafa1506d90
2018-04-03 14:51:57.152177+0800 Block[20267:148833] 0x7fafa1506d90
2018-04-03 14:51:57.152359+0800 Block[20267:148833] 0x7fafa1506d90
结论是self、weakSelf和strongSelf指向同一个对象,只是强弱不同而已。在我看来,self 和 strongSelf 是相同的。所以我觉得这段代码的记忆是这样的:
我的困惑是当block执行时,block会强引用self,但是如果self没有同时释放,self也是强引用block。会不会导致retain cycle?
【问题讨论】:
-
乍一看,您似乎在这里将 pointer 与 reference 混合在一起;只要实例的指针相同,引用的范围也完全不同。
标签: ios objective-c