gpt4 book ai didi

objective-c - CFRetain 启用垃圾收集器的 C 字符串

转载 作者:搜寻专家 更新时间:2023-10-30 20:27:05 26 4
gpt4 key购买 nike

我正在读这个 http://lists.apple.com/archives/objc-language/2011/Mar/msg00084.html

这是一个很长(有趣)的线程,我可能错过了重点...

这一点引起了我的注意

    char* path = [string fileSystemRepresentation];
CFRetain (path);
int result = open (path, ...);
CFRelease (path);

我知道如果不进行垃圾回收(char* 不是 CFType),您将无法执行此操作。当启用垃圾收集时,这会做任何事情吗?

我的想法是这是一个错误,或者实际上并没有将其作为解决方案提出,尽管我是这样读的。

最佳答案

是的,这是一个错误; CFRetain 仅适用于 CFTypes。 C 指针/结构不会被垃圾收集,即使启用了 GC。在非 GC 中,字符串被放置在一个自动释放池中,因此在池被耗尽之前你不需要担心它。如果您确实需要保留该字符串,则需要复制它。

您可能会在 interior pointers 上找到文档部分有用;您返回的 char * 本质上是一个内部指针,尽管您无权访问它包含的对象。

关于objective-c - CFRetain 启用垃圾收集器的 C 字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5350730/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com