第五章 通过 Objective-C 的 ARC 内存管理

本文介绍了Objective-C中的自动引用计数(ARC)机制,包括其历史背景、如何在项目中混合使用ARC与非ARC代码,以及所有权修饰符的使用等关键概念。

5.1 Objective-C 的 ARC 基础入门

  5.1.1 历史简介

  5.1.2 手动引用计数与自动引用计数

5.2 什么是ARC

  ARC 是可以为你自动插入 retain 和 release 语句的编译器专属功能,虽然ARC 是随着 IOS5 一同发布的,但是通过 ARC 编译的应用也可以在 IOS4 设备上运行。

  混合搭配支持 ARC 与 不支持ARC 的代码,方法是通过 -fno-objc-arc 和 -fobjc-arc 两个编译器标志。甚至可以在类中混合搭配使用支持 ARC 与 不支持 ARC的代码!

  编译时支持 ARC 而文件的代码不支持 ARC:

# !_has_feature(objc-arc)
//这里是不支持 ARC 的代码
- (void) release {
    //在这里释放变量    
}
#endif

  Clang 语言扩展 _has_feature 类函数宏非常强大。可以支持任何支持Clang 语言特征并符合相应条件的代码进行条件编译。

5.2.1 在 ARC 工程中集成非 ARC 的第三方代码

  1) 使用 -fno-objc-arc 编译器开关

  2)用 XCode 的 Convert to Objective-C ARC 工具(其实该工具会自动为排除的文件添加 -fno-objc-arc)

5.2.3 ARC 所有权修饰符

  ARC 会自动帮你插入 retain 和 release 语句。不过“自动”代码生成器需要一些提示来了解销毁已分配内存的准确时机。ARC通过指定的所有权修饰符来确定指针的生命周期。ARC 支持 4 种所有权修饰符:

  • __strong:
  • __weak:与__unsafe_unretained 修饰符非常相似,只是当指针指向内容被销毁后,弱指针便会变成空值(nil),此外,该属性支持IOS5以及以上的系统。
  • __unsafe_unretained:当你没有指针但想要保存指向某物体的引用时,可以使用该修饰符。类似于在 ARC 中使用 assign
  • __autoreleasing : 可以在想要从方法返回一个自动释放的变量时使用。与上面三个修饰符的重要区别是该修饰符无法用在属性上。

  在 Xcode4.2/LLVM 3 中,栈变量的默认所有权修饰符是 __strong,属性的则是 __assign。而在 Xcode4.3/LLVM3.1 及更高版本中,属性的默认所有修饰权也别改成了 __strong。还有,所有权修饰符与常量修饰符不同,它是位置无关的。因此 __weak NSObject myObject; 和 NSObject __weak MyObject; 意义是一样的。

5.2.4 ARC 空声明变量

  使用 ARC 的另一个优势是所有未初始化的变量默认都是“空值化”的。不过注意,与其他高级编程语言不同,ARC 不会自动将标量的值设置为零。

转载于:https://www.cnblogs.com/style513/p/3160564.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值