NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init] 会处理这个内存吗?或者我应该明确使用 free() 来释放这个内存?
您应该使用free
通过分配的所有内存malloc
如果我显式释放内存以及使用 NSAutoreleasePool 会产生问题吗?
没有任何。你也必须这样做。
有没有办法检查这个线程中的内存泄漏。Xcode 的分析工具用于检查目标 C 代码中的内存泄漏。它有助于管理 C 类型的内存分配吗?
据我了解,Instruments Leaks 与 ObjC 运行时系统密切相关,因此它不适用于通过malloc
. 对于 MacOSX,Apple 提供了一些工具来检测内存泄漏(MallocDebug 和泄漏,请参见此处),但它们不适用于 iOS 应用程序。您可能会尝试在模拟器上运行它们,但我怀疑它们不会给您可靠的结果。
另一方面,如果您使用的是纯 C 库,那么您可以围绕它构建一个从您的整体代码(通过删除 iOS 特定部分)派生的纯 C 测试平台,以便能够在 MacOSX 下检查它。测试平台将使用纯 C 模块模拟您的应用程序的工作流程。不过,这将是一项重大的努力,只有当你真的担心它时,我才会去做。
您拥有的另一种方法是围绕您的 C 模块构建和 ObjC 包装器,以便您拥有一个或多个使用 C 模块并通过 init/dealloc 方法中的 malloc/free 为其分配/释放内存的类;您可以使用 Instruments 检查您的 ObjC 包装器对象是否没有泄漏,如果您已正确实现包装器对象,您可以非常确定您没有泄漏 malloc 内存。