【发布时间】:2011-03-15 23:27:00
【问题描述】:
我迫切需要有关 iPhone 应用程序内存泄漏的帮助。该应用程序已准备好提交到应用程序商店,稳定,在 iPhone 模拟器或 Clang 中完全没有内存泄漏......但在我的 iPod Touch 上似乎充满了它们。
当我尝试从 Core Data 检索数据时,它们似乎都源于 managedObjectModel。
我的应用程序中的核心数据代码是不久前由 Xcode 自动创建的,我注意到当你让 xcode 生成它时,代码已经发生了变化......我已经尝试过新旧代码,但它没什么区别。
如果我注释掉下面的代码,问题就消失了……总之能看出它有什么问题吗?到目前为止,我已经花了 9 个小时来解决这个问题!
NSString *entityForName = [[NSString alloc] initWithString:@"OfflineSettings"];
NSFetchRequest *request = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:entityForName inManagedObjectContext:[self managedObjectContext]];
[request setEntity:entity];
[entityForName release];
NSSortDescriptor *sortById = [[NSSortDescriptor alloc] initWithKey:@"Id" ascending:YES];
[request setSortDescriptors:[NSArray arrayWithObject:sortById]];
[sortById release];
NSError *error;
NSMutableArray *mutableFetchResults = [[[self managedObjectContext] executeFetchRequest:request error:&error] mutableCopy];
if (mutableFetchResults == nil) {
// Handle the error.
NSLog(@"Error fetching");
}
int intId = -1;
if ([mutableFetchResults count] == 0) {
TTDERROR(@"No id has been saved to offline settings");
} else {
OfflineSettings *offlineSettings = (OfflineSettings *)[mutableFetchResults objectAtIndex:0];
intId = [offlineSettings.Id intValue];
}
[mutableFetchResults release];
[request release];
泄漏似乎就在这一行:
NSMutableArray *mutableFetchResults = [[[self managedObjectContext] executeFetchRequest:request error:&error] mutableCopy];
.. [self managedObjectContext] 的代码如下,以防万一..
- (NSManagedObjectContext *)managedObjectContext {
if (managedObjectContext_ != nil) {
return managedObjectContext_;
}
NSPersistentStoreCoordinator *coordinator = [self persistentStoreCoordinator];
if (coordinator != nil) {
managedObjectContext_ = [[NSManagedObjectContext alloc] init];
[managedObjectContext_ setPersistentStoreCoordinator:coordinator];
}
return managedObjectContext_;
}
我真的很茫然,所以我会很感激你的帮助!
史蒂文
【问题讨论】:
-
我看不出该行是如何具体导致泄漏的,但您为什么要制作可变副本?您根本不修改数组,只需访问它,然后释放它。另外,您如何检测 iPod 上的泄漏,而不是在模拟器中?
-
嘿,mutableCopy 在我最初复制的示例代码中。我已经尝试过,并且摆脱了随附的版本,但它没有帮助。我正在使用 Instruments 检测 iPod 上的泄漏。谢谢,
标签: iphone objective-c core-data memory-leaks