黑马程序员-IOS-OC基础-ARC

--------------------------------------  android培训 java培训 ios培训期待与您交流! ---------------------------------
ARC是自ios5之后新增的新特性。ARC是编译器特性,而不是ios运行时特性,ARC完全消除了手动管理内存的烦恼,编译器会自动在适当的地方插入适当的retain、release、autorelease语句,来提高开发者的工作效率,减少对内存处理不当的风险。
1,ARC的基本原理
<1>ARC的规则:只要还有一个强指针变量指向对象,对象就会保持在内存中,也就是说,ARC的判断准则是:只要没有强指针指向对象,对象就会被释放。
<2>强指针和弱指针
(1)强指针(Strong):默认情况下,所有的指针都是强指针。
(2)弱指针(weak):弱指针指向的对象被回收后,弱指针会自动变为空指针(nil),不会引发野指针(空指针)错误。
2,ARC的注意点:

<1>不允许调用releas、retain、autorelease

<2>允许重写dealloc方法,但是不允许在dealloc方法中调用[super dealloc];

<3>@property的参数

(1)Strong:成员变量是强指针(适用于OC对象类型)

(2)weak:成员变量是弱指针(适用于OC对象类型)

(3)assign:适用于非OC对象类型,

(4)以前的retain改为用Strong

#import <Foundation/Foundation.h>
@class Car;
@interface Person : NSObject
//strong代表成员变量_car是强指针类型的变量且只适用于OC对象
@property (nonatomic,strong)Car *car;
//strong代表成员变量_name是强指针类型的变量且只适用于OC对象
@property (nonatomic,strong)NSString *name;
//assign:适用于非OC对象类型
@property (nonatomic,assign)int age;
@end
<4>ARC下循环引用解决方案

(1) ARC

 一端用strong,另端用weak

  (2) ARC

端用retain,另端用assign

#import <Foundation/Foundation.h>
@class Person;
@interface Car : NSObject
//weak代表成员变量_persson是弱指针类型的变量,用来解决ARC下的循环引用。
@property (nonatomic,weak)Person *person;
/*
 这里Car和Person这两个类同时引用对方,这样就容易引发对象不能被释放的内存问题
 在Person类一端用strong(@property (nonatomic,strong)Car *car;);
 另一端用weak(@property (nonatomic,weak)Person *person;),
 这样就可以解决ARC下的循环引用引发的对象不能释放的内存问题了。
 */
@end
3,Xcode 5.xx的ARC转换功能
<1>单个文档ARC的开启与关闭


<2>整个非ARC项目的ARC转换





--------------------------------------  android培训 java培训 ios培训期待与您交流! ---------------------------------
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值