Objective c 在GC下如何处理返回的C类型的内存?
根据NSString方法的文档Objective c 在GC下如何处理返回的C类型的内存?,objective-c,cocoa,garbage-collection,Objective C,Cocoa,Garbage Collection,根据NSString方法的文档-UTF8String: 返回的C字符串将被自动删除 就像返回的对象一样被释放 被释放;你应该复制C 字符串,如果需要将其存储在外部 自动释放上下文的 将创建C字符串 因此,在保留/释放内存管理下,使用以下方法: - (const char*) giveMeACString { NSString* string = @"I'm a string!"; return [string UTF8String]; } 可以,只要调用方法将返回的const
-UTF8String
:
返回的C字符串将被自动删除
就像返回的对象一样被释放
被释放;你应该复制C
字符串,如果需要将其存储在外部
自动释放上下文的
将创建C字符串
因此,在保留/释放内存管理下,使用以下方法:
- (const char*) giveMeACString
{
NSString* string = @"I'm a string!";
return [string UTF8String];
}
可以,只要调用方法将返回的const char*视为自动释放的对象
然而,据我所知,在垃圾收集下没有自动释放上下文。C类型不是垃圾收集的,因此GC看起来不会像对待返回的对象那样对待返回的指针
它的寿命与什么有关?它是否仍然在线程的运行循环中可靠地“稍后”释放,或者它在GC下的行为与在非GC下的行为不同?因为您没有显式分配这些空间,您不必担心释放。我认为内存是从垃圾收集内存中分配的,返回类型是
\u strong const char*
。这意味着当无法从指针的根集合访问它时,将以正常方式收集它
这基本上意味着您需要将其存储在标记为\uu strong
的指针变量中,否则它将在某个点被收集
我推测,一个不可变的字符串保持了对自身UTF8版本的引用,因此它只需要计算一次,因此UTF8字符串可能不会消失,直到NSString消失,这就是为什么您不必担心它会正常消失 我相信你是对的,我不需要手动释放它,但我想知道cocoa何时以及如何释放它。