我了解 NSObject 实例是通过 ARC 处理的,而 CG 引用不是(不确定 CF 对象)。
我使用 Instruments 发现了内存泄漏,这是一个不断增长的 CFString 对象。我在我的应用程序中进行了搜索,并没有使用 CFString,所以我认为它嵌入在我需要发布的其他一些框架对象中。但是,我不知道哪些对象需要释放,哪些不需要。我已经分析了该应用程序,它在内存泄漏方面是干净的。
那么,是否有一些明确的文档说明需要释放哪些对象?
我了解 NSObject 实例是通过 ARC 处理的,而 CG 引用不是(不确定 CF 对象)。
我使用 Instruments 发现了内存泄漏,这是一个不断增长的 CFString 对象。我在我的应用程序中进行了搜索,并没有使用 CFString,所以我认为它嵌入在我需要发布的其他一些框架对象中。但是,我不知道哪些对象需要释放,哪些不需要。我已经分析了该应用程序,它在内存泄漏方面是干净的。
那么,是否有一些明确的文档说明需要释放哪些对象?
首先,它是一个CFString
还是一个NSCFString
?NSCFString
是桥接类,它通常会出现在NSString
代码中的位置。
要调试您的特定问题,请首先查看 Instruments 提供的堆栈跟踪。它会告诉你对象是在哪里创建的。这通常会帮助您了解泄漏的对象是什么,然后您可以使用它来查找您的错误。
对于您的一般问题,几乎所有对象都必须释放。问题是 ARC 是否会为您插入版本。我知道这听起来很迂腐,但这是一个重要的区别。ARC 不是垃圾收集。它只是在编译时以非常确定的方式插入内存调用(如果启用),用于 ObjC 对象类型和一些可以表现为 ObjC 对象类型(特别是dispatch_
类型)的对象类型。有几种情况,一个给定的对象可能在一个地方需要手动内存,但在另一个地方接受自动内存管理。请记住,CFStringRef
并且NSString
是免费桥接的。给定的对象可以被视为两者之一,因此在某些情况下可能是 ARC 管理的,但在其他情况下则不是。此外,ARC 可能不会在所有编译单元(.m
文件)上启用。
@interface
正如@Catfish_Man 解释的那样,您可以通过它们的声明来识别 ObjC 对象。