Objective-C autoreleasepool 指令作用域外的变量。

Objective-C autoreleasepool directive effect variables outside scope.

假设我有 c++ 函数与 objective-c 成员组合。 该函数获取 std::string 并将其转换为 NSstring*,并在离开之前使用此变量...

我应该期望 NSstring*autoreleasepool 范围结束时发布吗?

void myclass::myfunc(context& ctx)
{ 
    @autoreleasepool
    {
        std::string path = ctx.getData().path;
        NSString *nsPath = [NSString stringWithUTF8String:path.c_str()];
        ... (do something with nsString, Should it be released after leaving the scope ?)
    }
}

不,你不需要。根据规则,如果您通过以下方式之一增加其保留计数,则只需要释放变量:

  1. 正在通过 new 或 alloc/init 初始化。
  2. 正在通过复制进行复制。
  3. 通过保留增加保留计数。

如果您通过除上述方式之外的任何方式获取变量,您并不拥有它,因此您不需要释放它。

通过[NSString stringWithUTF8String:path.c_str()]返回的字符串是自动释放的字符串。一旦当前运行循环结束,它将被释放。所以你不需要释放它。