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);
 
将打印输出null,不在挂机

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)的主要内容,如果未能解决你的问题,请参考以下文章

ARC简介

[OC学习笔记]ARC与引用计数

Swift学习笔记-自动引用计数弱引用和无主引用

Swift学习笔记-自动引用计数弱引用和无主引用

OC学习笔记

ARC指南1 - strong和weak指针