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


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值