block 内部为什么需要再次用strong持有weak 对象

block里面为什么要再次转化为强引用持有weak?

sleep顺序很有关系:

1、如果调用test1后,异步block立即强引用了weak self,则页面pop后,viewcontroller不会立即释放,而是等待线程block执行完后才释放。

2、如果进入异步 block,sleep之后再强引用weak self, 页面pop了,就立即释放了。 异步线程执行到读取weakself时,已经是nil了。

image.png
-(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];
    });
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。