转换到iOS 5时需要注意什么

时间:2011-10-14 22:22:10

标签: ios memory-management ios5

摘要: 您是否可以在迁移到iOS 5时添加我需要注意的事项清单? StackOverflow非常宝贵,因为我一直致力于升级到iOS 5.我发现了一些在Xcode 4.2之前我错过的非常基本的东西,我想知道其他“陷阱”可能潜伏着什么。

详细信息:本周iOS 5发货,我不得不对我的几个应用进行一些更改。由于新的ARC功能,Xcode 4.2在分析内存管理代码方面做得更好。 iOS 5更新是查看所有内存管理代码的重要点。新编译器还发现了早期编译器遗漏的许多其他问题。感谢Apple编译工程师。以下是有帮助的主要内容(其中许多内容也适用于早期版本的iOS)。

  1. 确保call [super dealloc] at the END of your dealloc methods,而不是开头。
  2. 在viewDidUnload中,some people have reported bugs that require [super viewDidUnload] to be called at the end,而不是viewDidUnload的开头。
  3. 了解保留计数,合成设置器以及何时调用释放或自动释放。新编译器将指出比旧编译器更多的问题。 (我以为我一直很小心,但显然我不够小心。)Apple的memory management guide是必读的 - 没有捷径。
  4. turn on zombies when debugging是个好主意(在Xcode中,选择Product | Edit Scheme ...并选择Debug方案;在Diagnostics选项卡上,选中Enable Zombie Objects)。这可以帮助您找到僵尸的尝试使用(您不应再使用的对象)。
  5. Leaks仪器也很有帮助。在配置文件模式下运行您的应用程序,然后选择Leaks模板。在“仪器”窗口中,选择“泄漏”仪器并选中“收集泄漏的内存内容”框,它将帮助您查看泄露的内存源自代码的位置。
  6. 我遇到过一些可能的结果:

        - (oneway void) release { }
    

    我应该寻找潜在陷阱的其他建议吗?我觉得我的应用程序现在更加稳定,但我之前觉得它们非常好。

1 个答案:

答案 0 :(得分:6)

1 /如果要更改大小,模态控制器的行为会有所不同。如果您需要不同大小的模态对话框,请考虑使用iOS 5子视图控制器。

2 /对于一个表,如果你返回nil节标题和正高度,在iOS 4中,标题被隐藏了。在iOS 5中,您必须为nil标题返回零高度。

3 / UDID已弃用。您可以使用CFUUIDCreate创建唯一ID并将其保存到您的设置中,但请注意,可以备份设备数据,然后将其还原到其他设备,从而使您拥有两个具有相同ID的设备。我通过使用属性kSecAttrAccessibleWhenUnlockedThisDeviceOnly将我的id保存到keychain来解决了这种情况。

关于您的清单: 应始终将[super viewDidUnload]作为viewDidUnload中的最后一个语句调用。逻辑与[super dealloc]中的逻辑相同。注意,你也应该在你的dealloc中调用[self viewDidUnload](如果你还没有在那里释放你的内存),因为它不是隐式调用的(虽然有时它是)。

根据我的实验,仪器中的泄漏检测不会报告在未指定属性名称的情况下合成的属性的泄漏。