【发布时间】:2015-09-17 16:52:08
【问题描述】:
在 iOS 上过渡到 ARC。
我有一个自动释放的 NSString,我用它来生成 UTF-8 表示,并依靠池生命周期来保持 UTF-8 指针的活动:
char *GetStringBuffer(something)
{
NSString *ns = [NSString stringWithSomething:something];
return [ns UTF8String];
}
something 的性质在这里并不重要。
Pre-ARC 规则确保返回的数据指针在当前自动释放池的生命周期内保持有效。至关重要的是,我没有随身携带 NSString 指针。
现在,在ARC下,函数返回时字符串不会被释放吗?我不认为 ARC 会认为 char * 指向 NSString 深处的结构是一个强引用,尤其是考虑到它从来没有被明确地释放过。
这里最好的 ARC 成语是什么?
【问题讨论】:
-
您对 ARC 下的代码有疑问吗?
ns仍然在 ARC 下自动发布。 -
是的,但问题是何时?
-
ARC 不会改变自动释放的工作方式。在这方面没有任何变化。 ARC 所做的只是在需要时隐式添加
release和retain。听起来您正在担心一个实际上不存在或您没有遇到过的问题。 -
换句话说,你的代码没问题。
-
那么用 [objectWithXXX] 分配的 Cocoa 对象的生命周期还是和以前一样?
标签: ios automatic-ref-counting