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

itM*_*nce 2 c objective-c automatic-ref-counting

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

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

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

我猜想ARC不会跟踪该指针,一旦函数getUrl()返回,它将释放此NSString,从而使指针无效。

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

Ita*_*ber 5

不,ARC不(也不能)管理非对象类型的生存期。如果您查看的文档-[NSString UTF8String],还可以看到以下内容:

此C字符串是指向字符串对象内部结构的指针,该对象的生存期可能短于字符串对象,并且肯定不会具有更长的生存期。因此,如果需要将C字符串存储在使用此属性的内存上下文之外,则应复制它。

您返回的UTF-8字符串的最大生存期为源生存期NSString(ARC将在函数末尾清除该生存期),因此,如果需要保留该字符串,则需要设置一个使用strdup或类似方法进行复制(并自行管理寿命)。