iOS MRC 内存管理的实用技巧

iOS MRC 内存管理的实用技巧

在上一篇文章中提到了 iOS MRC 内存管理的基本原则

基于引用计数的内存管理策略相当简单,所以对应的需要开发者注意的点就会很多。让众多开发者都能掌握内存管理知识并合理的应用在日常开发中几乎是件不可能的事情。

所以,苹果只能在官方文档中尽量给到一些合理正确的规范与技巧,以便于降低开发者处理内存管理的难度和门槛。官方文档可参考 Practical Memory Management,我翻译了一份,可以参考 实用的内存管理

官方文档总是讲的很精准、权威,很多时候看官方文档比去 CSDN 上阅读被复制黏贴了 N 遍的文章要高效的多。

基于官方文档,整理和总结如下。

使用访问器让内存管理更加容易

所谓访问器,其实就是普通的 getter 和 setter。官方推荐将内存管理也就是引用计数管理的代码,放到访问器中,然后在业务逻辑中使用访问器。

官方提到这样会让内存管理编的更简单,降低出错的几率。这个是必然的。我觉得还有两点很重要:

  1. 精简和统一内存管理代码,便于调试和维护。
  2. 将内存管理代码和业务代码分离,从设计上更清晰整洁。

假设有个变量 count。

@interface Counter : NSObject
@property (nonatomic, retain) NSNumber *count;
@end;

在 getter 中,只需返回合成的实例变量,不需要 retain 或 release。

- (NSNumber *)count {
    return _count;
}

在 setter 方法中,如果其他所有人都遵循相同的规则,那么其他人很可能随时让 newCount 的引用计数减一,从而导致 newCount 被释放,所以你必须先通过 retain 使其引用计数加一。然后,你必须要把 _count 的引用计数减一。

在 OC 中,对一个 nil 对象发消息,是被允许的,所以即使 _count 没有被设置过,对其调用 release 也没事。

这里官方提到了一个很好的注意点:必须先把 newCount 的引用计数加一,然后再把 _cou

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值