内存管理

引用计数管理内存的思考四大原则:

  • 自己生成的对象,自己持有
  • 非自己生成的对象,自己也能持有
  • 不再需要自己持有的对象及时释放
  • 无法释放非自己持有的对象(直接crash)
    注:释放非自己持有的对象crash

alloc,new, copy,,mutableCopy这些方法开头的方法名会被默认标记为 __attribute((ns_returns_retained)),以这些方法创建的对象,编译器在会在调用方法外围要加上内存管理代码retain/release,所以其在作用域结束的时候就会释放,而不以这些关键字开头的方法,会被默认标记为__attribute((ns_returns_not_retained)),编译器会在方法内部自动加上autorelease方法,这时创建的对象就会被注册到自动释放池中,同时其释放会延迟,等到自动释放池销毁的时候才释放。

用引用计数表(散列表)管理引用计数的好处:

  • 对象用内存块的分配无需考虑内存块头部
  • 引用计数表各记录中存有内存块地址,可以从各个记录追溯到各对象的内存块。
  • 在利用工具检测内存泄漏时,引用计数表的各记录有助于检测各对象的持有者是否存在。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值