如何解决iOS核心数据-意外的内存泄漏
| 我有多线程核心数据设置-效果很好。在此设置中,我具有一系列可获取所需数据的功能,等等。除了会导致少量泄漏的漏洞外,它们都工作良好,但是加起来很快,导致应用崩溃。- (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;
}
如果有人可以在这里阐明一点,将不胜感激。
提前致谢,
麦可
解决方法
我无法轻易发现内存泄漏。另一方面,我认为只有在内存不足的情况下,内存泄漏才很容易导致崩溃。无论如何,在我看来,您的代码存在问题,可能会导致崩溃:
从结果来看
NSMutableArray *results = [[self.managedObjectContext executeFetchRequest:request error:&error] mutableCopy];
您选择一个对象:
returnObj = tmpObj;
并在发布结果后返回:
[results release];
...
return returnObj;
据我了解,释放数组也会释放其所有对象,因此您将返回一个可以随时释放(甚至只是释放)的对象。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。