0

我是objective-c的新手,我想知道当我像下面的代码一样返回一个对象时,我是否应该像这样自动释放它:

- (NSArray *)loadCategory
{
    NSArray *temp = [[[NSArray alloc] initWithObjects:c1, c2, nil] autorelease];

    return temp;
}

另外,当我使用调用函数获取返回值时,是否应该保留目标?

- (void)viewDidLoad
{
     category = [self loadCategory];

     [category retain];

   [super viewDidLoad];
}

最后,我可以替换为:

- (void)viewDidLoad
    {
        self.category = [self loadCategory];
       [super viewDidLoad];
    } 
4

3 回答 3

0

只要您的category属性定义为retainor copy,您的所有三个示例看起来都是正确的。记得在或中释放(或设置为nil)。viewDidUnloaddealloc

于 2012-05-08T09:14:42.740 回答
0

是的,你是对的,你需要在 loadCategory 方法中调用 autorelease 。这允许自动释放池处理数组对象的释放(在您的调用代码更改以保留它之前,它不会被释放)。是的,您需要保留调用代码中的数组。最后,是的,只要您的 self.category 属性声明为“保留”:

@property (nonatomic,retain) NSArray *category;

并且因为您的属性保留了数组,所以您必须稍后释放它,例如在 dealloc 中。

于 2012-05-08T09:15:31.373 回答
0

你的代码很好。您也可以使用...

[NSArray arrayWithObjects: ..., nil];

这将为您返回一个自动释放实例。

如果您在不再需要它后保留它,也不要忘记在此数组上调用release 。

于 2012-05-08T09:16:00.403 回答