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 ?)
}
}
不,你不需要。根据规则,如果您通过以下方式之一增加其保留计数,则只需要释放变量:
- 正在通过 new 或 alloc/init 初始化。
- 正在通过复制进行复制。
- 通过保留增加保留计数。
如果您通过除上述方式之外的任何方式获取变量,您并不拥有它,因此您不需要释放它。
通过[NSString stringWithUTF8String:path.c_str()]
返回的字符串是自动释放的字符串。一旦当前运行循环结束,它将被释放。所以你不需要释放它。
假设我有 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 ?)
}
}
不,你不需要。根据规则,如果您通过以下方式之一增加其保留计数,则只需要释放变量:
- 正在通过 new 或 alloc/init 初始化。
- 正在通过复制进行复制。
- 通过保留增加保留计数。
如果您通过除上述方式之外的任何方式获取变量,您并不拥有它,因此您不需要释放它。
通过[NSString stringWithUTF8String:path.c_str()]
返回的字符串是自动释放的字符串。一旦当前运行循环结束,它将被释放。所以你不需要释放它。