我正在尝试记忆测试我的应用。
我已经按照组织者 - 文档文章“恢复已放弃的内存”,但我不确定结果是否会使我的测试页面变好或不好,或介于两者之间。
(我的测试涉及:导航到第2页,返回第1页,按'马克堆'重复25次以获得良好的衡量标准。)
附件是我的分配测试的屏幕截图。大多数#Persistent值都是0.但是有一些异常。这些是典型的吗?
(最后一张快照,26,是在停止录制后拍摄的,并按照文档中的建议在跟踪结束处按下'Mark Heap'。)
我会非常感谢你的一些建议。感谢。
答案 0 :(得分:2)
我相信你正在使用ARC,如果你正在使用ARC,就没有必要为堆积而烦恼,它会处理所有事情。
以下是使用ARC时要记住的9个简单点from Apple's docs:
ARC强加了一些使用其他时不存在的新规则 编译模式。规则旨在提供完全可靠的 记忆管理模式;在某些情况下,他们只是执行最好的 实践,在其他一些实践中,它们可以简化代码或显而易见 你不必处理内存管理的推论。如果你 违反这些规则,您会立即得到编译时错误,而不是 可能在运行时变得明显的微妙错误。
您无法显式调用dealloc,或实现或调用retain, release,retainCount或autorelease。 禁止扩展到使用@selector(retain),@ selector(release)等。
如果需要管理除释放实例变量之外的资源,则可以实现dealloc方法。你不必 (实际上你不能)释放实例变量,但你可能需要 在系统类和。上调用[systemClassInstance setDelegate:nil] 其他未使用ARC编译的代码。 ARC中的自定义dealloc方法不需要调用[super dealloc](它实际上会导致编译器错误)。该 链接到 super由编译器自动执行。
您仍然可以使用CFRetain,CFRelease和其他相关功能 核心基金会风格
您不能使用NSAllocateObject或NSDeallocateObject。
使用alloc创建对象;运行时负责 解除分配对象。
您不能在C结构中使用对象指针。 您可以创建一个Objective-C类来管理数据,而不是使用结构。 id和void *之间没有偶然的演员。
您必须使用特殊的强制转换来告诉编译器有关对象的生命周期。你需要这样做才能在Objective-C对象之间进行转换 您作为函数参数传递的Core Foundation类型。更多 详情请参阅“管理免费电话桥接”。
您无法使用NSAutoreleasePool对象。 ARC提供了@autoreleasepool块。它们的优点是比NSAutoreleasePool更有效。
- 醇>
您无法使用内存区域。 不再需要使用NSZone - 无论如何它们都会被现代的Objective-C运行时忽略。