【发布时间】:2011-12-08 02:53:27
【问题描述】:
总结: 您能否将迁移到 iOS 5 时需要注意的事项添加到我的清单中? StackOverflow 在我升级到 iOS 的过程中非常宝贵5. 我发现了一些在 Xcode 4.2 之前我错过的非常基本的东西,我想知道可能还有什么其他“陷阱”。
详细信息:随着本周 iOS 5 的发布,我不得不对我的几个应用程序进行一些更改。由于新的 ARC 功能,Xcode 4.2 在分析内存管理代码方面做得更好。 iOS 5 更新是查看所有内存管理代码的好时机。新编译器还发现了早期编译器遗漏的许多其他问题。感谢 Apple 编译器工程师。以下是有帮助的主要内容(其中许多也适用于早期版本的 iOS)。
- 确保call [super dealloc] at the END of your dealloc methods,而不是开始。
- 在 viewDidUnload 中,some people have reported bugs that require [super viewDidUnload] to be called at the end,不是您 viewDidUnload 的开始。
- 了解保留计数、综合设置器以及何时调用释放或自动释放。新的编译器会比旧的编译器指出更多的问题。 (我以为我很小心,但显然我不够小心。)Apple 的memory management guide 是必读的——没有捷径。
- turn on zombies when debugging 是个好主意(在 Xcode 中,选择 Product | Edit Scheme... 并选择 Debug scheme;在 Diagnostics 选项卡上,选中 Enable Zombie Objects)。这可以帮助您找到僵尸的尝试用途(您不应该再使用的对象)。
- Leaks 工具也很有帮助。在配置文件模式下运行您的应用程序并选择泄漏模板。在 Instruments 窗口中,选择 Leaks 工具并选中“Gather Leaked Memory Contents”复选框,它将帮助您查看代码中泄漏内存的来源。
我遇到了一些零碎的事情:
- Apple 的 singleton pattern 需要在返回类型声明中添加“oneway”:
- 您可能需要在构建设置中manually add "armv6" as an architecture type(并确保将“仅构建活动架构”设置为“否”)。
我应该寻找任何其他关于潜在陷阱的建议吗?我感觉我的应用现在更稳定了,但我以前对它们感觉很好。
【问题讨论】:
-
这不是内存管理,但无论如何它很重要:如果您下载任何数据并希望将其存储在设备上,请注意不要将其保存到文档文件夹中。为此使用库/缓存或 tmp。或者将应用程序数据存储到 NSApplicationSupportDirectory 并附加您的捆绑包 ID。详情请参阅developer.apple.com/library/mac/#documentation/FileManagement/…。
-
也不是内存管理。但是,如果您正在做与安全/证书相关的事情。请注意,MD5 散列证书在 SecTrustEvaluate 上返回 kSecTrustResultRecoverableTrustFailure。因为 ios5 认为 MD5 哈希不安全。
-
迁移到 IOS5 的另一件事是已弃用的 UDID。 stackoverflow.com/questions/6993325/…
标签: ios memory-management ios5