__block和__weak修饰符的区别
来源:互联网 发布:linux互斥锁原理 编辑:程序博客网 时间:2024/06/09 06:47
__weak与__block修饰符区别
API Reference对__block变量修饰符的解释,大概意思:
1.__block对象在block中是可以被修改、重新赋值的。
2.__block对象在block中不会被block强引用一次,从而不会出现循环引用问题。
API Reference对__weak变量修饰符的解释,大概意思:
使用了__weak修饰符的对象,作用等同于定义为weak的property。自然不会导致循环引用问题,因为苹果文档已经说的很清楚,当原对象没有任何强引用的时候,弱引用指针也会被设置为nil。
因此,__block和__weak修饰符的区别其实是挺明显的:
1.__block不管是ARC还是MRC模式下都可以使用,可以修饰对象,还可以修饰基本数据类型。
2.__weak只能在ARC模式下使用,也只能修饰对象(NSString),不能修饰基本数据类型(int)。
3.__block对象可以在block中被重新赋值,__weak不可以。
PS:__unsafe_unretained修饰符可以被视为iOS SDK 4.3以前版本的__weak的替代品,不过不会被自动置空为nil。所以尽可能不要使用这个修饰符。
Block的生命周期管理非常的微妙,与ARC混在一起后,更加复杂。
当Block延stack向上(up)传递的时候,直接返回,编译器会添加[[ copy] autorelease]代码。
当Block延stack向下传递给需要retain的容器的时候,需要显式的调用[^{} copy]方法。
在ARC下,__block修改的NSObject指针依然会被retain。
在ARC下,一个block内引用一个对象的实例变量后,self会被retain,所以极易造成strong reference cycle,可以通过__weak指针来避免这种情形,因为ARC不会为__weak指针retain。
- __block和__weak修饰符的区别
- __block和__weak修饰符的区别?
- __weak与__block修饰符的区别
- [iOS]__weak与__block修饰符的区别
- __weak与__block修饰符区别
- __block和__weak的区别
- __block和__weak 的区别
- __weak和__block的区别
- __Block和__Weak的区别
- __block和__weak的区别
- __block和__weak的区别
- __block 和 __weak 区别
- __weak 和 __block 关键字的区别
- iOS __block和__weak的区别
- __weak与__block修饰符到底有什么区别
- iOS __weak与__block修饰符到底有什么区别
- __weak与__block修饰符到底有什么区别
- __weak与__block修饰符到底有什么区别
- Oracle创建表空间实例一则
- raptor程序:斐波那契数列
- 现在AR/VR机会很少,可能全都是泡沫之互联网创业分析!
- MTCNN(Multi-task convolutional neural networks)人脸对齐
- 轻量级分布式 RPC 框架
- __block和__weak修饰符的区别
- ++i 与 i++ 效率的问题
- MATLAB 自带 神经网络工具包
- 安卓开发 颜色代码 一览表。
- NSArray数组的遍历
- 【javaEE】springMVC依赖分析
- 合并有序数组
- 斐波那契数列
- SAP 金税接口介绍