OC学习笔记之ARC
一、什么是ARC<span style="font-size:16px; color:rgb(0,0,0)"> ARC是自己主动引用计数。苹果官方在Xcode4.2及以后版本号中增加的一个内存管理机制,全然代替了程序猿人工的内存管理。使得程序猿仅仅须关心程序本身。使用ARC。编译器会自己主动在代码中增加内存管理代码,是一个编译器特性。而不是执行时特性,当然,它也和JAVA的垃圾回收不同,它的本质和手动的内存管理是一样的,仅仅是这些代码编译器会自己主动增加。下图是在Xcode中使用ARC:<img src="//img-blog.csdn.net/20140513211234109?
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvd2FuZ3FpbnFpYW4=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" /></span></span></span></div><div style="font-family:Arial; font-size:14px; line-height:22px"></div><div style="font-family:Arial; font-size:14px; line-height:22px"><span style="font-size:24px"><span style="font-size:14px"><span style="font-size:16px"><span style="font-size:24px; color:rgb(255,0,0)">二、ARC的特点<span style="font-size:16px; color:rgb(0,0,0)"> 当我们使用ARC自己主动引用计数的时候,一些内存管理相关的代码就不可以再使用。如:retain,release。autorelease [super dealloc]等等。<img src="//img-blog.csdn.net/20140513211443546?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvd2FuZ3FpbnFpYW4=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" /> Xcode自己主动引用计数后,用户就不能再手动管理内存。</span></span></span></span></span></div><div style="font-family:Arial; font-size:14px; line-height:22px"><span style="font-size:24px"><span style="font-size:14px"><span style="font-size:16px"> </span></span></span><span style="font-size:24px; color:rgb(255,0,0)">三、ARC的原理<span style="font-size:16px; color:rgb(0,0,0)"> ARC的原理非常easy。仅仅要一个oc对象没有<span style="color:rgb(192,0,0)">强指针</span>指向它,系统就回收,反之仅仅要有<span style="color:rgb(192,0,0)">强指针</span>指向它。就不会被回收。这里有一个概念:强指针和弱指针。默认情况下,指针都是强指针,而用weakkeyword声明的指针就是弱指针。请看这一段代码:</span></span><p style="margin-top:0px; margin-bottom:0px; line-height:normal; font-size:13px; font-family:Menlo; color:rgb(0,132,0)"></p><pre code_snippet_id="343728" snippet_file_name="blog_20140513_1_3690365" name="code" class="objc" style="font-size: 14px; line-height: 22px;">// // main.m // ARC // // Created by 葬花 桥 on 14-5-13. // Copyright (c) 2014年 itcast. All rights reserved. // #import <Foundation/Foundation.h> #import "Person.h" int main() { Person *p = [[Person alloc] init]; __weak Person *p2 = [[Person alloc] init]; p.name = @"桥"; p2.name = @"小桥"; return 0; }
当中p是强指针,p2是弱指针,那么在ARC机制中会发生什么呢?
如上图所看到的,仅仅要一个oc对象没有强指针指向它,那么它立即就会被系统回收。
在ARC中,@propery的參数由retain改为strong或weak。二者的差别是,strong表示成员变量的指针为强指针,后者是弱指针