关于内存管理思考方式的一些学习总结

关于内存管理思考方式的一些学习总结

谈到内存管理首先想到的是“引用计数”这个名称,但真正正确客观的去思考这个问题,应该先理解以下几点:

  • 自己生成的对象,自己所持有
  • 非自己生成的对象,自己也能持有
  • 不再需要自己持有的对象时释放
  • 非自己持有的对象无法释放

下面我们看一下对象操作对应的表格

对象方法OC方法
生成并持有的对象alloc/new/copy/mutableCopy等方法
持有的对象retain方法
释放对象release方法
废弃对象dealloc方法

接下来看一下具体的各个项目

自己生成的对象,自己持有

使用以下方法名开头意味着自己生成的对象自己持有:

  • alloc
  • new
  • copy
  • mutableCopy

    下面来举一个例子

    /*
    *自己生成并持有对象
    */
    id obj=[[NSObject alloc]init];

非自己生成的对象,自己也可以持有

用上述方法以外的方法取得对象,因为非自己生成并持有,所以自己不是该对象的持有者。我们经常遇到的+(id)array方法便是

/*
 *取得非自己生成并持有的对象
 */
id array=[NSMutableArray array];
/*
 *取得的对象存在,但自己不持有对象
 */
[array retain];
/*
 *自己持有对象
 */

不再需要自己持有的对象时释放

自己持有的对象,一旦不在需要,持有者有义务释放该对象,释放通过release方法。

/*
 *取得非自己生成并持有的对象
 */
id array=[NSMutableArray array];
/*
 *取得的对象存在,但自己不持有对象
 */
[array retain];
/*
 *自己持有对象
 */
[array release];
/*
 *释放对象
 *对象不可再被访问
 */

无法释放非自己持有的对象

这个就好理解了,对于通过alloc/new/copy/mutableCopy方法生成的对象,或是retain持有的对象,在不需要时就需要将其释放。而由此以外所得的对象绝不能释放。倘若在应用程序中释放了非自己所持有的对象就会造成崩溃。

以上内存管理的思考方式是我在看书以及实践中所得,有不全面和不细致的地方,希望可以对看到的有所帮助。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值