OC内存管理要点总结

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方法

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值