lifecycle - iOS 关于block生命周期的问题
怪我咯
怪我咯 2017-04-17 17:56:30
[iOS讨论组]

1,testAction是类A的一个方法,当我把类A释放的时候,作为函数参数的testBlock依然存在,请问下这是为什么?有什么方法是能够让testBlock的生命周期和类A的生命周期保持一致的吗?

-(void)testAction:(void(^)())testBlock {
WS(weakSelf, self);
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2 * NSEC_PER_SEC));

dispatch_after(popTime, dispatch_get_main_queue(), ^(void){
    if (testBlock) { //此时weakSelf=nil 但是testBlock依然存在
    testBlock(); //会执行回调
    }
});
}
怪我咯
怪我咯

走同样的路,发现不同的人生

全部回复(1)
巴扎黑

因为你的block是作为参数传过来的,也就是说,在这个方法没有执行完,block是一直存在的,你可以将block作为该类的属性或者成员变量,这样block的生命周期就和实例的生命周期一样了,当然这中情况下就要考虑block会不会持有对象了,可能会造成循环引用或者对象的延迟释放

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号