Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.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 在GC下如何处理返回的C类型的内存?_Objective C_Cocoa_Garbage Collection - Fatal编程技术网

Objective c 在GC下如何处理返回的C类型的内存?

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

根据NSString方法的文档
-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何时以及如何释放它。