gpt4 book ai didi

objective-c - ARC 是否跟踪 [NSString UTF8String] 生成的 const char* ?

转载 作者:行者123 更新时间:2023-12-03 01:20:54 25 4
gpt4 key购买 nike

const char* 有效吗?ARC 是否跟踪该函数返回的指针?

const char* getUrl()
{
// retrieve an url with obj-c
NSString *maybeTmp = [[NSString alloc] initWithString:@"some url"];
return [maybeTmp UTF8String];
}

此代码用作桥梁。 C 库将调用此函数。

我猜测 ARC 不会跟踪该指针,并且一旦函数 getUrl() 返回就会释放这个 NSString,从而使该指针无效。

  • 函数结束后指针是否无效?
  • 如果无效,是否有办法明确要求 ARC 跟踪它?

最佳答案

不,ARC 不(也不能)管理非对象类型的生命周期。如果你看一下documentation for -[NSString UTF8String] ,您还可以看到以下内容:

This C string is a pointer to a structure inside the string object, which may have a lifetime shorter than the string object and will certainly not have a longer lifetime. Therefore, you should copy the C string if it needs to be stored outside of the memory context in which you use this property.

你得到的UTF-8字符串的最大生命周期是源NSString的生​​命周期(ARC将在函数结束时清理),所以如果你需要保留对于字符串,您需要使用 strdup 或类似方法制作副本(并自行管理生命周期)。

关于objective-c - ARC 是否跟踪 [NSString UTF8String] 生成的 const char* ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48082094/

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