返回后释放对象

时间:2010-06-19 17:20:18

标签: ios objective-c iphone memory-management

我使用一个对象来获取一些值并返回这个值。 将返回的值仍在此对象中。 下面是代码:

    XMLErrorParser *xmlErrorParser = [XMLErrorParser alloc];
    [xmlErrorParser parseData: data];
    return xmlErrorParser.errors;

那么我如何发布xmlErrorParser对象并返回它的值呢? 感谢。

5 个答案:

答案 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怎么样?