在返回executeFetchRequest的NSArray时,我应该保留,自动释放还是什么也不做:结果?

时间:2011-07-15 00:36:38

标签: objective-c core-data retain autorelease

请查看以下代码:

- (NSArray *)requestEntities:(NSString *)entityName {
    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
    NSEntityDescription *entity = [NSEntityDescription
                               entityForName:entityName inManagedObjectContext:_context];

    [fetchRequest setEntity:entity]; 

    NSError *requestError = nil;

    NSArray *result = [_context executeFetchRequest:fetchRequest error:&requestError];

    [fetchRequest release], fetchRequest = nil;

    return result;
}

我需要在其他地方使用结果,在这个方法中,结果是否正确返回(没有保留或自动释放)?此外,它的来电者在获得结果,保留或直接使用它时应该怎么做?

谢谢!

1 个答案:

答案 0 :(得分:1)

惯例是,除了包含newalloccopy的方法以外的方法返回的对象,您不负责任。您给出的数组几乎肯定已经自动释放,因此它将在您的代码完成后释放并返回到运行循环。如果你需要保持超出该点的数组(例如,如果你想保留这些结果并引用它们来响应未来的UI事件)那么你应该保留数组,最好是将它分配给一个保留的属性。 / p>

我强烈建议您完整阅读memory management programming guide,或者至少在前几节中了解您所询问的内容。