您的位置:首页 > 其它

OC内存管理要点总结

2014-08-14 22:40 211 查看
1. alloc开辟内存空间,并且将对象的引用计数由0变为1
 retain 将对象的引用计数加1
 release 将对象的引用计数(立即)-1

2.在管理内存的时候,经常出现三个问题:
 (1)内存泄露
 现象:内存堆积,在运行中崩溃(占用内存较小时可能不会crash)
 产生原因:对一个对象进行alloc,retain,copy之后,没有对它进行相应的release或者autorelease
 解决方案:对一个对象进行alloc,retain,copy之后,进行相应的release或者autorelease(遵循谁污染,谁治理原则)
     
  ( 2 )野指针异常
   现象:可能会崩溃,也可能不会崩溃,写到某一行代码时突然崩溃.(没有写任何和引用计数相关的代码)
 产生原因:该对象的空间已经被系统回收,不能再访问没有所有权对象.
 解决方案:空间被系统回收之后,禁止访问.
 (3)过度释放
 现象:当写完和内存引用计数-1有关的操作后,程序立即crash
 原因:空间被系统回收之后,不能再做和引用计数-1有关的操作,否则会立即crash
  解决方案:删除多余释放的代码
 
3.autorelease: 
   会将声明为autorelease的对象放入离它最近的自动释放池中,当自动释放池销毁时,会向池中的每一个
  对象发送一个release消息

4.内存管理原则:
  如果你对一个对象进行alloc,retain,copy之后,你就拥有了该对象的所有权,你就必须对它进行release或者autorelease

5.谁污染,谁治理,不是自己alloc,retain,copy的对象不用管

 例如:NSArray * arr = [NSMutableArray arrayWithObjects:@"aaa", @"bbb", @"ccc", nil];

 虽然在创建数组时调用了便利构造器,但是不用自己释放,因为系统类型的便利构造器已经自带了一个dealloc方法
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: