您的位置:首页 > 其它

内存管理初级

2014-08-14 22:46 162 查看
***自己每开辟一次空间,自己要对其(自己开辟的)进行释放;对引用计数+1,相应的也要对引用计数-1;不必管系统对空间的操作,系统会对其进行处理.

1.能让引用计数改变的五个方法

(1)+alloc开辟内存空间,将对象的引用计数+1

(2)-retain将对象的引用计数+1

(3)-copy

(4)-release将对象的引用计数立即-1

(5)-autorelease将对象的引用计数-1(不是立即的,将来的某个时刻)

autorelease会将声明为autorelease的对象放入离他最近的自动释放池中,当自动释放池销毁时,会向池中的每一个对象发送一个release消息

2.当引用计数为0时,系统会自动回收内存,我们只管理引用计数

3.改变引用计数可能带来的问题

(1)过渡释放

现象:如果引用计数为0时,当写完和内存引用计数-1有关的操作后,程序立即crash

原因:空间被系统回收之后,不能再做和引用计数-1有关的操作,否则会立即crash

解决方案:删除释放空间操作

(2)野指针异常:

现象:当空间被释放后,继续用指针变量(对象)访问该空间,可能会崩溃,也可能不会崩溃,写到某一行代码时突然崩溃(没有写任何和引用计数相关的代码)

产生原因:该对象的空间已经被系统回收,不能再访问没有所有权的对象

解决方案:空间被系统回收之后,禁止访问

4.内存管理基本原则

如果你对一个对象进行alloc,retain,copy之后,你就拥有了该对象的所有权,你就必须对它进行release或者autorelease(也就是自己每写一个alloc,retain,copy之后,就必须对它进行release或者autorelease)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: