繁体   English   中英

iOS 核心数据 - 意外 memory 泄漏

[英]iOS Core Data - unexpected memory leak

我有多线程核心数据设置 - 它工作得很好。 在这个设置中,我有一系列获取所需数据等的函数。 除了导致小泄漏的这个之外,它们都运行良好 - 但它加起来非常快并使应用程序崩溃。

- (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;
}

如果有人可以在这里阐明一些观点,将不胜感激。

提前致谢,

迈克尔

我无法轻易发现 memory 泄漏。 另一方面,我认为 memory 泄漏不容易导致崩溃,除非您用完 memory。 无论如何,在我看来,您的代码存在可能导致崩溃的问题:

从结果来看,

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

你 select 和 object:

           returnObj = tmpObj;

并在发布结果后返回:

[results release];
...
return returnObj;

据我了解,释放数组也会释放其所有 object,因此您返回的 object 可以随时释放(甚至只是释放)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM