iOS核心数据 - 意外的内存泄漏

时间:2011-05-26 13:55:43

标签: ios xcode ipad core-data

我有多线程核心数据设置 - 它运行良好。在这个设置中,我有一系列功能,可以获取所需的数据,等等。它们都运行良好,除了这个导致小泄漏 - 但它加起来很快并且崩溃了应用程序。

- (id)getRecordOfType:(NSString *)type WithCode:(NSString *)codeString{
    id returnObj = nil;

    NSFetchRequest *request = [[NSFetchRequest alloc] init];
    [request setEntity:[NSEntityDescription entityForName:type inManagedObjectContext:self.managedObjectContext]];

    NSPredicate *categoryPred = [NSPredicate predicateWithFormat:[@"code='" stringByAppendingFormat:@"%@'", codeString]];
    [request setPredicate:categoryPred];
    categoryPred = nil;

    if (![request entity]) {
        [request release]; request = nil;
        return nil;
    }

    NSError *error;
    NSMutableArray *results = [[self.managedObjectContext executeFetchRequest:request error:&error] mutableCopy];

    for (id tmpObj in results) {
        if([(NSString *)[tmpObj code] isEqualToString:codeString])
            returnObj = tmpObj;
            break;
    }

    [results release];
    [request release];

return returnObj;
}

如果有人能在这里阐明一些,我们将不胜感激。

提前致谢,

迈克尔

1 个答案:

答案 0 :(得分:0)

我无法轻易发现内存泄漏。另一方面,我认为内存泄漏不容易导致崩溃,只是在内存不足的情况下。无论如何,在我看来,您的代码存在问题可能导致崩溃:

来自结果,

    NSMutableArray *results = [[self.managedObjectContext executeFetchRequest:request error:&error] mutableCopy];

选择一个对象:

           returnObj = tmpObj;

并在发布结果后返回:

[results release];
...
return returnObj;

我的理解是,释放一个数组也会释放它的所有对象,所以你要返回一个可以随时解除分配的对象(甚至只是解除分配)。