0

我正在尝试记忆测试我的应用程序。

我已经关注了题为“恢复您已放弃的内存”的Organizer - Documentation文章,但我不确定结果是使我的测试页面好还是坏,或者介于两者之间。

(我的测试涉及:导航到第 2 页,返回第 1 页,按“Mark Heap” - 重复 25 次以获得良好的测量结果。)

附件是我的分配测试的屏幕截图。大多数#Persistent 值为0。但也有一些异常。这些是典型的吗?

(最后一个 Heapshot,26,是在停止记录后拍摄的,并在跟踪结束时按“Mark Heap” - 如文档中所建议的那样。)

我将非常感谢一些建议。谢谢。

在此处输入图像描述

4

1 回答 1

2

我相信您使用的是 ARC,如果您使用的是 ARC,则无需担心堆,它会处理所有事情。

以下是使用 ARC 时需要牢记的 Apple 文档中的 9 个简单点:

ARC 强加了一些在使用其他编译器模式时不存在的新规则。这些规则旨在提供一个完全可靠的内存管理模型;在某些情况下,它们只是强制执行最佳实践,在另一些情况下,它们简化了您的代码,或者是您不必处理内存管理的明显推论。如果你违反了这些规则,你会立即得到一个编译时错误,而不是一个在运行时可能会变得明显的细微错误。

  1. 您不能显式调用 dealloc,或者实现或调用 retain、release、retainCount 或 autorelease。禁止扩展到使用@selector(retain)、@selector(release) 等。

  2. 如果您需要管理资源而不是释放实例变量,您可以实现一个 dealloc 方法。您不必(实际上您不能)释放实例变量,但您可能需要在系统类和其他未使用 ARC 编译的代码上调用 [systemClassInstance setDelegate:nil]。ARC 中的自定义 dealloc 方法不需要调用 [super dealloc](它实际上会导致编译器错误)。到 super 的链接是由编译器自动执行的。

  3. 您仍然可以将 CFRetain、CFRelease 和其他相关功能与 Core Foundation 样式一起使用

  4. 您不能使用 NSAllocateObject 或 NSDeallocateObject。

  5. 您使用 alloc 创建对象;运行时负责释放对象。

  6. 您不能在 C 结构中使用对象指针。您可以创建一个 Objective-C 类来管理数据,而不是使用结构。id 和 void * 之间没有随意转换。

  7. 您必须使用特殊类型转换来告诉编译器对象的生命周期。您需要这样做才能在作为函数参数传递的 Objective-C 对象和 Core Foundation 类型之间进行转换。有关详细信息,请参阅“管理免费桥接”。</p>

  8. 您不能使用 NSAutoreleasePool 对象。ARC 提供了 @autoreleasepool 块。这些具有比 NSAutoreleasePool 更高效的优势。

  9. 您不能使用内存区域。没有必要再使用 NSZone 了——无论如何,现代的 Objective-C 运行时都忽略了它们。

于 2012-08-15T11:19:35.693 回答