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不(也不能)管理非对象类型的生存期。如果您查看的文档-[NSString UTF8String],还可以看到以下内容:
此C字符串是指向字符串对象内部结构的指针,该对象的生存期可能短于字符串对象,并且肯定不会具有更长的生存期。因此,如果需要将C字符串存储在使用此属性的内存上下文之外,则应复制它。
您返回的UTF-8字符串的最大生存期为源生存期NSString(ARC将在函数末尾清除该生存期),因此,如果需要保留该字符串,则需要设置一个使用strdup或类似方法进行复制(并自行管理寿命)。
| 归档时间: |
|
| 查看次数: |
108 次 |
| 最近记录: |