block里面为什么要再次转化为强引用持有weak?
sleep顺序很有关系:
1、如果调用test1后,异步block立即强引用了weak self,则页面pop后,viewcontroller不会立即释放,而是等待线程block执行完后才释放。
2、如果进入异步 block,sleep之后再强引用weak self, 页面pop了,就立即释放了。 异步线程执行到读取weakself时,已经是nil了。
-(void)test1{
__weak typeof(self) weakSelf = self;
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW, 0), ^{
// sleep(5);
__strong typeof(weakSelf)strongSelf = weakSelf;
sleep(5);
NSLog(@"%@---%@",strongSelf,strongSelf.string);
strongSelf.string = @"123";
[strongSelf foot];
});
}
网友评论