我使用一个对象来获取一些值并返回这个值。 将返回的值仍在此对象中。 下面是代码:
XMLErrorParser *xmlErrorParser = [XMLErrorParser alloc];
[xmlErrorParser parseData: data];
return xmlErrorParser.errors;
那么我如何发布xmlErrorParser对象并返回它的值呢? 感谢。
答案 0 :(得分:6)
只需返回对象errors
保留的自动发布版本。
在不向我们提供有关XMLErrorParser
内容的详细信息的情况下,我们假设errors
包含NSArray
{/ 1}}:
XMLErrorParser *xmlErrorParser = [[XMLErrorParser alloc] init];
[xmlErrorParser parseData: data];
NSArray *errors = [[xmlErrorParser.errors retain] autorelease];
[xmlErrorParser release];
return errors;
(请注意,您错过了错误解析器对象的初始化。)
答案 1 :(得分:3)
XMLErrorParser *xmlErrorParser = [[XMLErrorParser alloc] init];
[xmlErrorParser parseData: data];
return [xmlErrorParser autorelease].errors;
或更好
XMLErrorParser *xmlErrorParser = [[[XMLErrorParser alloc] init] autorelease];
[xmlErrorParser parseData: data];
return xmlErrorParser.errors;
答案 2 :(得分:1)
这就是autorelease
的用途(可能是你遗忘了init
?):
XMLErrorParser *xmlErrorParser = [[[XMLErrorParser alloc] init] autorelease];
[xmlErrorParser parseData: data];
return xmlErrorParser.errors;
阅读Memory Management Guide for Cocoa。
根据您的方法的目的,您可能还必须保留xmlErrorParser.errors
。
答案 3 :(得分:0)
我认为parseData是你的初始值设定项。在这种情况下,你可以使用autorelease
消息让最里面的自动释放池知道你不再需要该对象。
示例:
XMLErrorParser *xmlErrorParser = [XMLErrorParser alloc];
[[xmlErrorParser parseData: data] autorelease];
return xmlErrorParser.errors;
我建议您明确保留errors
属性,否则您可能会忘记它。经验法则,释放和自动释放调用必须匹配保留数量才能释放对象。
答案 4 :(得分:0)
- autorelease
怎么样?