OC的Block中使用weakSelf/strongSelf
2016-08-06 15:22
267 查看
OC的Block中使用weakSelf/strongSelf
在OC的block中如果使用self的话会引起循环引用,也就是说,在block中直接使用self的话会被强引用,解决方案是使用 weakself( __weak __typeof(&*self)weakSelf = self;),这样在block结束释放的时候,weakself因为是弱引用,也会被释放掉。一般情况下是没问题,但是,一下情况会有例外—–WeakSelf(weakSelf) [self myBlock:^(NSString *str) { /** * 第一次调用的时候weakSelf还没有被释放 */ [weakSelf doSomething]; /** * 第二次调用的时候weakSelf有可能就被释放掉了 */ [weakSelf doOtherThing]; }];
这个时候就要用到strongSelf啦,如下
WeakSelf(weakSelf) [self myBlock:^(NSString *str) { /** * 在block中需要多次使用weakself时要转成strongSelf,这样确保在block执行完成之前不被释放掉 */ __strong __typeof(self) strongSelf = weakSelf; [strongSelf doSomething]; [strongSelf doOtherThing]; }];
相关文章推荐
- Ruby中Block和迭代器的使用讲解
- Ruby中使用Block、Proc、lambda实现闭包
- Ruby中的block、proc、lambda区别总结
- Ruby中的block代码块学习教程
- 如何消除inline-block属性带来的标签间间隙
- 全面解析Objective-C中的block代码块的使用
- block 实现原理详解(一)
- iOS页面传值总结
- ios高效开发二--ARC跟block那点事
- EOP / Office 365: Block or Allow IP Address in Connection Filtering
- objective-c block 讲解
- IOS block的学习
- block && Grand Central Dispatch
- 随机颜色及大小方框首页
- 代理 通知 Block区别
- 代理 通知 Block区别
- Hadoop MapReduce中如何处理跨行Block和InputSplit
- Block 的循环引用:如何产生 和 解决办法
- java.io.IOException: Could not obtain block
- SwiftClosure