第十三篇:ARC自动引用计数器原理

1.指针分2种:

》强指针:默认情况下,所有的指针都是强指针 __strong。

》弱指针:__weak。说明:当一个弱指针指向一个创建出来的对象,而之后没有强指针指向该对象,那么该对象会在内存中被释放,弱指针被赋值成空 nil 。

   代码表现形式:

      Dog * p1 = [ [Dog alloc] init ] ; // p1 为强指针,指向新创建出来的对象,引用计数器 = 1

      __weak Dog * p2 = p1; // p1所指向的对象的引用计数器不会+1,引用计数器还是 = 1

     p1 = [ [Dog alloc] init ] ;  // p1又指向了新的对象,这行代码之后,旧对象就会在内存中被释放且p2 = nil ,因为该对象没有强指针指向它。如果这行代码换成 p1 = nil ; 效果一样.


2.ARC判断准则: 只要没有强指针 指向 堆内存中的对象 ,该对象的内存就会被自动翻译。


3.ARC特点:

》不请允许调用release , retain , retainCount .

》允许重写dealloc对象方法,但是不 允许调用 [super dealloc] ;

》@property 参数:

         》strong : 成员变量是强指针,适用于OC对象。@propery (nonatomic , strong) Dog * dog; //表示dog对象指针是 强 指针类型。

         》weak  :  成员变量是弱指针,适用于OC对象。@propery (nonatomic , weak) Dog * dog; //表示dog对象指针是 弱 指针类型。

》以前的retain 改为用 strong,也就是 有多少个强指针 指向 创建出来的 对象,那么该对象的引用计数器等于几。


4.自动管理内存(ARC)的互引用:

》问题:strong 对象的指针 出现了循环互引用。这样就会导致在一个相互指向的循环圈内的对象内存不能被释放,出现内存泄漏问题。

》解决:一端用strong 类型指针,一端用weak类型指针。只要没有出现 强指针类型的对象 循环指向就可以解决该问题。


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值