iOS之ARC下的Block
2012-05-02 10:17
357 查看
【ARC的特性】
ARC下,所有NSObject类型指针,
1. 默认为__strong类型
2. 可以显示的指定为__weak类型,__weak类型指针在所指向对象销毁后会自动置为nil
3. __autorelesing类型用于inout参数类型
ARC下,当一个函数返回一个NSObject指针时,编译器会帮我们实现autorelease调用。例如:
return pObject;
编译器会帮我们扩展为 return [pObject autorelease];
ARC下,不能显式release,可以使用将值赋为nil来让编译器为我们release。
【ARC与Block】
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。
ARC下,所有NSObject类型指针,
1. 默认为__strong类型
2. 可以显示的指定为__weak类型,__weak类型指针在所指向对象销毁后会自动置为nil
3. __autorelesing类型用于inout参数类型
ARC下,当一个函数返回一个NSObject指针时,编译器会帮我们实现autorelease调用。例如:
return pObject;
编译器会帮我们扩展为 return [pObject autorelease];
ARC下,不能显式release,可以使用将值赋为nil来让编译器为我们release。
【ARC与Block】
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。
相关文章推荐
- iOS: ARC和非ARC下使用Block属性的问题
- iOS开发笔记之五十八——ARC下的block类型分析
- ios开发 block 在ARC机制下的内存管理
- iOS: ARC和非ARC下使用Block属性的问题
- iOS: ARC和非ARC下使用Block属性的问题
- IOS ARC跟block那点事
- iOS: ARC和非ARC下使用Block属性的问题
- ios开发-OC中ARC、block和protocol的学习
- <iOS>ARC和非ARC下使用Block属性的问题
- ios高效开发二--ARC跟block那点事
- iOS: ARC和非ARC下使用Block属性的问题
- IOS开发 ARC和非ARC下使用Block属性的问题
- iOS之ARC下的Block
- IOS ARC跟block那点事
- iOS开发——OC基础-ARC、BLOCK、协议
- iOS中Block的引用循环问题 (ARC & non-ARC)
- ios高效开发二--ARC跟block那点事
- 黑马程序员--ios基础--oc-内存管理之ARC、Block
- iOS之block使用小结、在arc中使用block、如何防止循环引用
- iOS OC内存管理、ARC、property属性、__strong、__weak、__block——iOS 编码复习(一)