我有多线程核心数据设置 - 它运行良好。在这个设置中,我有一系列功能,可以获取所需的数据,等等。它们都运行良好,除了这个导致小泄漏 - 但它加起来很快并且崩溃了应用程序。
- (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;
}
如果有人能在这里阐明一些,我们将不胜感激。
提前致谢,
迈克尔
答案 0 :(得分:0)
我无法轻易发现内存泄漏。另一方面,我认为内存泄漏不容易导致崩溃,只是在内存不足的情况下。无论如何,在我看来,您的代码存在问题可能导致崩溃:
来自结果,
NSMutableArray *results = [[self.managedObjectContext executeFetchRequest:request error:&error] mutableCopy];
选择一个对象:
returnObj = tmpObj;
并在发布结果后返回:
[results release];
...
return returnObj;
我的理解是,释放一个数组也会释放它的所有对象,所以你要返回一个可以随时解除分配的对象(甚至只是解除分配)。