我有以下代码

- (NSString *)stringByEscapingXMLEntities;
{
    NSString *result;
    @autoreleasepool {
        result = [self stringByReplacingOccurrencesOfString:@"&" withString:@"&"];
        result = [result stringByReplacingOccurrencesOfString:@"\"" withString:@"""];
        // ... lot of -stringByReplacingOccurrencesOfString: calls
        result = [result stringByReplacingOccurrencesOfString:@" " withString:@" "];
    }
    return result;
}

我现在问自己如何将所有权 result 转移出方法。在 ARC 之前,我会在退出 autorelease 块之前保留 result 并在方法结束时返回 autoreleased 。

谢谢!

最佳答案

有两种方法可以做到这一点:

  • 将方法重命名为类似 copyStringByEscapingXMLEntities 的名称——copy 表示所有权的转移,ARC 相应地创建代码。
  • 在标题中将 NS_RETURNS_RETAINED 附加到方法定义中,如下所示: - (NSString *)stringByEscapingXMLEntities NS_RETURNS_RETAINED


  • 编辑: 正如 'iljawascoding' 所提到的,@autoreleasepool 没有真正需要保留 - 除了优化。

    编辑 2: 记住:ARC 总是做正确的事。您尝试的所有事情(您的评论)都会产生相同的正确程序——尽管如果结果被定义为 __strong 则缺乏一些优化。

    10-08 06:24
    查看更多