【发布时间】:2011-09-18 21:59:17
【问题描述】:
我正在使用 CoreData 来存储汽车、旅行、从 GPS 记录的数据等对象。 当我获取想要显示旅行列表、旅行的一些统计信息或在我的设置视图控制器中添加新车时,我几乎使用了这种请求:
- (void)getDataTrip
{
// Fetched data trips.
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"DataTrip" inManagedObjectContext:[self managedObjectContext]];
[fetchRequest setEntity:entity];
// Set predicate and sort orderings...
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"timestamp" ascending:YES];
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil];
[fetchRequest setSortDescriptors:sortDescriptors];
[sortDescriptors release];
[sortDescriptor release];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"idTrip = %@", self.idTrip];
[fetchRequest setPredicate:predicate];
// Execute the fetch -- create a mutable copy of the result.
NSError *error = nil;
NSMutableArray *mutableFetchResults = [[self.managedObjectContext executeFetchRequest:fetchRequest error:&error] mutableCopy];
if (mutableFetchResults == nil) {
// Handle the error.
NSLog(@"failed with error: %@", error);
}
// Set the array.
[self setDataTripArray:mutableFetchResults];
// Memory management.
[fetchRequest release];
[mutableFetchResults release];
}
有时,我在执行[self setDataTripArray:mutableFetchResults]; 时会发生泄漏,有时不会。在这种情况下,当我获取旅行数据时,当我使用导航控制器返回根视图控制器(显示旅行列表)和/或更改选项卡时,它总是泄漏。
无论如何,它只是泄漏,它一直来自从 CoreData 获取数据,并将这个数组提供给我的本地数组 var。
如果您知道如何解决此问题,请告诉我!一段时间后,它使应用程序崩溃。 谢谢!
【问题讨论】:
-
setDataTripArray是保留属性的访问者吗?如果是,你会在你的dealloc方法中释放它吗? -
是的。这是 var 声明
@property (nonatomic, retain) NSMutableArray *dataTripArray;。哦,我刚刚发现它可能来自哪里,我更新了我的帖子,你可以看到。 -
太棒了!以后请记住 Instruments 指向泄漏对象的创建位置,而不是泄漏对象的位置。顺便说一句,可以回答您自己的问题而不是编辑问题:)
-
谢谢@albertamg!我总是使用 Instruments 进行泄漏和内存分配,是的,但它指向
[self setDataTripArray:mutableFetchResults];,而不是稍后在我课堂上的retain。我还有一些其他漏洞,但我会找到我猜的方法:)
标签: arrays ios core-data memory-leaks