标签:
一、基本用法
1.会将对象放到一个自动释放池中
2.当自动释放池被销毁时,会对池子里的所有对象做一次release
3.会返回对象本身
4.调用完autorelease方法后,对象的计数器不受影响(销毁时影响)
二、好处
1.不需要关系想你对象释放的时间,
2.不需要再关心什么时候调用release
三、使用注意
1.占用内存比较大得对象,不要随便使用autorelease,应该使用release来精确控制
2.占用内存较小的对象使用autorelease,没有太大的影响
/////////////////
/////////////////
(一)ARC的判断准则:
只要没有强指针指向对象,对象就会被释放。
(二)指针分类:
(1)强指针:默认的情况下,所有的指针都是强指针,关键字strong
(2)弱指针:__weak 关键字修饰的指针
(三)ARC的特点总结:
1.不允许调用release,retain,retainCount
2.不允许重写dealloc,不允许调用 [super dealloc];
3.@property的参数:
strong :相当于原来的retain (适用于 OC对象类型),成员变量是强指针
weak : 相当于原来啊的assign ,(适用于 OC对象类型), 成员变量是弱指针
assign : 适用于非OC对象类型 即基础类型 int float 等
ARC是iOS5推出的新功能,全称叫ARC(Automatic Reference Counting)。简单地说,
就是代码中自动加入了retain/release,原先需要手动添加的用来处理呢村管理的引用计数的代码
可以自动地由编译器完成了。
有一点,ARC并不是GC,它只是一种代码静态(Static Analyzer)工具。
//////////////////////////
/////////////////////////
ARC 的本质
ARC 是编译器(时)特性,而不是运行时特性,更不是垃圾回收器(GC)。
1.栈区(stack)-由编译器自动分配释放,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。是个线程独有的,保存其运行状态和局部自动变量的。栈在线程开始的时候初始化,每个线程的栈相互独立,因此,栈是thread safe的。每个C++对象的数据成员也存在在栈中,每个函数都有自己的栈,栈被用来在函数之间传递参数。操作系统在切换线程的时候会自动切换栈,就是切换SS/ESP寄存器。占空间不需要在高级语言里面显式分配和释放。
2.堆区(heap)-一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表。是大家共有的空间,分全局堆和局部堆。全局堆就是所有没有分配的空间,局部堆就是用户分配的空间。堆在操作系统对进程初始化的时候分配,运行过程中也可以想系统要额外的堆空间,但是记得用完了要还给系统,要不然就是内存泄漏。堆里面一般放得时静态数据,如 Static 的数据和字符串常量什么的,资源加载后一般也放在堆里面。一个进程的所有线程共有这些堆,所以对堆得操作要考虑同步和互斥的问题。程序里面编译后的数据段都是堆得一部分。
3.全局区(静态区、Static)-全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在相邻的另一块区域。-程序结束后有系统释放
4.文字常量区-常量字符串就是放在这里的。程序结束后由系统释放
5.程序代码区- 存放函数体的二进制代码
标签:
原文地址:http://www.cnblogs.com/crybee/p/4934376.html