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