ARC简介和注意事项(学习笔记1)
Posted 好_快
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ARC简介和注意事项(学习笔记1)相关的知识,希望对你有一定的参考价值。
1、ARC是Xcode开发工具的编译器提供的功能,用来管理Objective-C对象内存一项技术。目的是为了让你把工作中心放在代码的功能上,而不再是对象的创建和释放的管理上。其原理和手动管理内存是一样的,实在编译时间内编译器完成内存申请和释放的插入工作。ARC引入了新的生命周期修饰符或者叫限定符(lifetime qualifiers)。
2、ARC中不能在使用retain、release、autorelease这三个方法,其中retain、release由编译器在编译期间自动插入,而autorelease可以用 blocks代替;dealloc方法还存在,还可以重写使用,但是不能调用[super dealloc],父类的dealloc响应由编译器强制完成;
3、ARC下的lifetime qualifiers由以下几种:
__strong,ARC下Object properties 都默认strong ,通过强引用持有当前对象;
__weak,不参与对象的声明周期管理,不增加引用计数,循环引用的良好解决方法;当对象被释放时,自动设置为安全nil指针,所以在ARC下声明dele
gate
最好使用他;在ARC中使用非ARC对象的delegate,安全做法在delegate中set to nil;
__unsafe_unretained,功能同__weak,但是它在对象被释放时,不会自动置nil,该指针摇摆不定(left dangling),一般不用;
__autoreleasing
is used to denote arguments that are passed by reference (id *
) and are autoreleased on return.没有使用过;
使用格式:
ClassName * qualifier variableName;例如,MyClass * __weak myWeakReference;
4、循环引用问题,在MRC中
__block id x告诉编译器不要retain该对象,在ARC中__block id x 默认还是retain该对象的,使用
__unsafe_unretained __block id x 可以达到不retain对象,但是
__unsafe_unretained不安全,所以可以使用
__weak(不支持ios4);
__block可以使得局部变量在blocks中修改和上述功能不冲突,个人认为可以和C语言中形参、实参传递对比理解,使用方法:
__block NSString * myString
5、xib属性大多使用__weak修饰
The patterns for declaring outlets in iOS and OS X change with ARC and become consistent across both platforms. The pattern you should typicallyadopt is: outlets should be weak
, except for those from File’s Owner to top-level objects in a nib file (or a storyboard scene) which should be strong
.Full details are given in Nib Files in Resource Programming Guide.
6、局部变量(对象类型)默认初始化成nil
- (void)myMethod |
NSString *name; |
NSLog(@"name: %@", name); |
7、-fobjc-arc
(compiler flag)使用ARC;foo-objc-arc禁用ARC
8、在ARC模式下,编译器是不能管理 Core Foundation对象的生命周期的,例如使用Core Graphics,需要自己管理调用 CFRetain
and CFRelease 。
__bridge
转换 Objective-C and Core Foundation 指针,但是不增加引用计数.
__bridge_retained
or CFBridgingRetain
转换Objective-C 指针为Core Foundation 指针,并且需要手动管理。
__bridge_transfer
or CFBridgingRelease
转换 non-Objective-C 指针为 Objective-C指针,而且有ARC管理.
参考连接:https://developer.apple.com/library/prerelease/ios/releasenotes/ObjectiveC/RN-TransitioningToARC/Introduction/Introduction.html#//apple_ref/doc/uid/TP40011226-CH1-SW4
以上是关于ARC简介和注意事项(学习笔记1)的主要内容,如果未能解决你的问题,请参考以下文章