码迷,mamicode.com
首页 > 其他好文 > 详细

OC Autorelease

时间:2015-11-03 22:43:00      阅读:178      评论:0      收藏:0      [点我收藏+]

标签:

一、基本用法

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.程序代码区- 存放函数体的二进制代码

 

 

OC Autorelease

标签:

原文地址:http://www.cnblogs.com/crybee/p/4934376.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!