Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 我如何知道使用ARC时需要释放哪些CG/CF对象?_Objective C_Automatic Ref Counting - Fatal编程技术网

Objective c 我如何知道使用ARC时需要释放哪些CG/CF对象?

Objective c 我如何知道使用ARC时需要释放哪些CG/CF对象?,objective-c,automatic-ref-counting,Objective C,Automatic Ref Counting,我知道NSObject实例是通过ARC处理的,而CG引用不是(不确定CF对象) 我用仪器发现了一个内存泄漏,一个不断增长的CFString对象。我在我的应用程序中进行了搜索,但没有使用CFString,所以我认为它嵌入了我需要发布的其他框架对象中。但是,我不知道哪些对象需要释放,哪些不需要。我已经分析了应用程序,它的内存泄漏方面是干净的 那么,是否有明确的文档说明需要释放哪些对象?首先,它是CFString还是NSCFStringNSCFString是桥接类,它经常出现在NSString位于代码

我知道NSObject实例是通过ARC处理的,而CG引用不是(不确定CF对象)

我用仪器发现了一个内存泄漏,一个不断增长的CFString对象。我在我的应用程序中进行了搜索,但没有使用CFString,所以我认为它嵌入了我需要发布的其他框架对象中。但是,我不知道哪些对象需要释放,哪些不需要。我已经分析了应用程序,它的内存泄漏方面是干净的


那么,是否有明确的文档说明需要释放哪些对象?

首先,它是
CFString
还是
NSCFString
NSCFString
是桥接类,它经常出现在
NSString
位于代码中的地方

要调试您的特定问题,请首先查看Instruments提供的堆栈跟踪。它将告诉您对象是在哪里创建的。这通常会帮助你知道泄漏的是什么物体,然后你可以用它来找出你的错误

对于您的一般问题,几乎所有对象都必须释放。问题是ARC是否为您插入版本。我知道这听起来很迂腐,但这是一个重要的区别。ARC不是垃圾收集。它只是在编译时以一种非常确定的方式插入内存调用(如果启用),用于ObjC对象类型和一些可以作为ObjC对象类型的对象类型(特别是
dispatch
类型)。有几种情况下,给定对象可能需要在一个位置手动存储,但在另一个位置接收自动内存管理。请记住,
CFStringRef
NSString
是免费桥接的。给定的对象可以被视为其中之一,因此在某些情况下可以被管理,但在其他情况下则不能。此外,可能不会在所有编译单元(
.m
文件)上启用ARC


正如@Catfish_Man所解释的,你可以通过它们的
@接口
声明来识别ObjC对象。

哈哈哈,你认为苹果会像给你文档一样简单吗?哈哈哈。。。那么,当使用ARC时,人们如何知道何时/是否释放对象?更严重的是,一般来说,如果函数名中有
Create
,和/或它实际上正在创建并返回某个对象(而不是在现有对象上操作),则需要释放它。否则,通常不会(更简单地说,对象类型是用@interface声明的,结构类型是用struct声明的)如果使用ARC,则不能对任何ObjC对象调用
-release
。所以我不确定你所说的“没有什么可释放的”是什么意思;编译器正在插入它。非常清楚。。。谢谢你提供的细节。。。我很感激。。。遗憾的是,@interface规则有一组例外。所有dispatch_*和xpc_*类型都是ObjC,但这在标题中并不明显。