2011-03-18 26 views
3

我在读这 http://lists.apple.com/archives/objc-language/2011/Mar/msg00084.htmlCFRetain C字符串与垃圾收集器启用

这是一个长期(有趣)线程,我可能已经错过了点...

这一点吸引了我的眼球

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

我知道你不能做垃圾回收(char *不是CFType)。垃圾回收处于启用状态时,它会执行任何操作

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

回答

1

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

您可能会发现interior pointers上的文档部分有用;你回来的char *本质上是一个内部指针,虽然你不能访问它的包含对象。

+0

感谢您验证。我仍然感到惊讶的是,线程中没有人提到它。 – hooleyhoop 2011-03-18 17:51:23