我有以下代码
- (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
则缺乏一些优化。