2

我有一个应用程序,我正在更新到Xcode的最新版本,并且遇到与自动引用计数(ARC)有关的多个错误。关于自动参考计数,我需要了解什么?

这些错误要求我将呼叫拉到例如autorelease,并调整我编写的处理内存管理的其他代码。

Clang documentation读取:

[ARC]不提供循环收集器;用户必须明确地管理生命期。

......这让我非常紧张。在过去,我一直被Objective-C内存管理问题困扰,并且在我的代码中为每个retainreleaseautorelease辩护。

现在,ARC正在呼吁我在改变我的内存管理语义方面迈出一大步。为了建立对ARC内存管理的信心,我需要了解什么?

回答

7

命名约定。修复每一个静态分析器问题,并确保你的命名是清晰的,并符合惯例 - 这现在用作与编译器的通信。现在,这确实没有必要,但最好删除所有编译器和检查器警告,测试,确保您对命名感到满意,然后进行转换。这也意味着提高警戒级别并解决问题。

避免属性详情点击这里:Deep copy of dictionaries gives Analyze error in Xcode 4.2

的例子,“避免属性”展示类型安全的,描述性的方法名称的重要性,并确保你包括您在翻译的使用和使用严格的选择匹配。选择:-Wstrict-selector-match。当您执行不安全的转换时,类型安全也会出现 - 很可能您需要在程序的某些部分通过特殊铸造引入类型安全。

悬挂对非托管类型的引用。这里看到:Assigning an existing CGColor to a CGColor property works in iOS Simulator, not iOS device. Why?

[ARC]不提供循环收集器;用户必须明确地管理生命期。

这是指强循环引用(例如,依赖于对象的对象)。这些将存在于您的旧程序中。仪器可以帮助您检测它们。

完成转换后,准备测试几个操作系统版本。

祝你好运!


附加功能:

What are the advantages and disadvantages of using ARC?