我是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];
}
答案 0 :(得分:0)
只要您的category
属性定义为retain
或copy
,您的所有三个示例都会正确无误。请务必在nil
或viewDidUnload
中发布(或设置为dealloc
)。
答案 1 :(得分:0)
是的,你是对的,你需要在loadCategory方法中调用autorelease。这允许自动释放池处理数组对象的释放(在调用代码进行更改以保留它之前,它不会被释放)。是的,您需要保留调用代码中的数组。最后,是的,只要你的self.category属性用'retain'声明:
@property (nonatomic,retain) NSArray *category;
由于您的属性会保留数组,因此您必须稍后将其释放,例如在dealloc。
答案 2 :(得分:0)
你的代码很好。 你也可以使用......
[NSArray arrayWithObjects:...,nil];
这将为您返回一个自动发布实例。
如果您不再需要保留,请不要忘记在此阵列上调用发布。