if (url_leng)
{
NSString *open_string;
if (g_system_status.language_code == 0)
open_string = @"Open";
else if (g_system_status.language_code == 1)
open_string = @"Abrir";
[open_string retain];
[alert addButtonWithTitle : open_string];
g_scan_result = targ_url;
}
考虑上面的代码段。我的问题是关于“保留”声明。不知何故,我需要保留语句才能使代码正常工作。我唯一的解释是当 open_string 超出范围时,将对其进行释放调用。因此需要一个 retain 调用来保存这个值。
希望有人能证实这一点......
还想问下条件 block 后是否需要字符串的release语句?
更新:(在阅读了您的建议和宝贵见解之后)
尝试了以下修改:
if (url_leng)
{
if (g_system_status.language_code == 0)
[alert addButtonWithTitle : @"Open"];
else if (g_system_status.language_code == 1)
[alert addButtonWithTitle : @"Abrir"];
else
[alert addButtonWithTitle : @"Open"];
g_scan_result = targ_url;
}
现在似乎一切正常(即使没有保留语句)。
最佳答案
open_string
是一个指向字符串文字的 NSString
指针。字符串文字存在于堆栈中。在您传递对字符串文字的引用的代码中,如果您想保留该数据,请将它们复制到堆上。如果您拥有一个对象(即,在一个对象上调用了保留/复制/新建/分配),您有责任释放它,否则您将泄漏内存。
关于objective-c - 当它指向文字时我应该保留 NSString 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13132101/