关于自动引用计数,我需要了解什么?

时间:2012-02-12 06:12:25

标签: objective-c xcode memory-management automatic-ref-counting clang

我有一个应用程序我正在更新到最新版本的Xcode,并且遇到了与自动引用计数(ARC)相关的多个错误。

这些错误让我拨打电话,例如autorelease,并调整我编写的处理内存管理的其他代码。

Clang documentation读取:

  

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

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

现在,ARC正在呼吁我改变我的内存管理语义。为了建立对ARC内存管理的信心,我需要知道什么?

1 个答案:

答案 0 :(得分: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?