objective-c - 当它指向文字时我应该保留 NSString 吗?

标签 objective-c ios nsstring retaincount

    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/

相关文章:

ios - UICollectionView 为特定位置设置背景 indexPath.row

iphone - 获取 NULL 缓存

ios - 让文本在 iPhone OS 中闪烁的最佳方法?

ios - OneSignal 不调用 didReceiveRemoteNotification

objective-c - 获取正确的 Node Json objective c

iphone - UITableview背景 View 颜色-iphone

iphone - UIScrollView 不可滚动

objective-c - 按字符数拆分 NSString?

objective-c - 使用正则表达式搜索 NSString

objective-c - 全局 NSString