【问题标题】:Core Data Memory Leaks核心数据内存泄漏
【发布时间】:2011-09-19 21:26:38
【问题描述】:

我开始在 Instruments 中测试我的应用程序以清理任何内存泄漏。除了与 Core Data 相关的内存泄漏之外,我已经能够清除所有内存泄漏。 Instruments 总是将我指向这部分代码:

NSMutableArray *mutableFetchResults = [[managedObjectContext executeFetchRequest:request error:&error] mutableCopy];
if (mutableFetchResults == nil) {
    // Handle the error
}

我使用以下代码在头文件中声明 managedObjectContext:

@interface UpperBody : UITableViewController <UITableViewDelegate, UITableViewDataSource> {

IBOutlet UITableView *upperTable;
NSMutableArray *exercises;
NSManagedObjectContext *managedObjectContext;

}

@property (nonatomic, retain) NSMutableArray *exercises;
@property (nonatomic, retain) NSManagedObjectContext *managedObjectContext;

我在 (void)dealloc 部分中释放 managedObjectContext。以下是使用 managedObjectContext 的完整代码部分:

- (void)loadExercises {

if (managedObjectContext == nil) {
    managedObjectContext = [(iFitAppDelegate *)[[UIApplication sharedApplication] delegate] managedObjectContext];
}

NSFetchRequest *request = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Exercises" inManagedObjectContext:managedObjectContext];
[request setEntity:entity];

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"category == 1"];
[request setPredicate:predicate];

NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"exerciseName" ascending:YES];
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil];
[request setSortDescriptors:sortDescriptors];
[sortDescriptor release];
[sortDescriptors release];

NSError *error = nil;
NSMutableArray *mutableFetchResults = [[managedObjectContext executeFetchRequest:request error:&error] mutableCopy];
if (mutableFetchResults == nil) {
    // Handle the error
}

[self setExercises:mutableFetchResults];
// [exercises addObject:@"Add Exercise"];
NSLog(@"Count of exercises %i", exercises.count);
[mutableFetchResults release];
[request release];
[self.tableView reloadData];

}

任何可能导致泄漏的建议将不胜感激!提前谢谢!

【问题讨论】:

  • 你在dealloc方法中释放exercises吗?
  • 是的,我在我的 dealloc 方法中发布了练习。 =/我不确定为什么 Instruments 指向 NSMutableArray *mutableFetchResults。我发布 managedObjectContext、results 和 mutableFetchRequests。
  • Instruments 指向泄漏对象的分配位置,而不是泄漏的位置。
  • 是的,我知道仪器指向泄漏对象的分配位置。我正试图找出我在发布它时出错的地方。
  • 您尝试过构建和分析吗?它可以发现潜在的泄漏...

标签: iphone ios memory core-data


【解决方案1】:

k上面的代码可能存在泄漏。我只是在需要时使用指向一个的指针来声明一个 NSManagedObjectContext 。以下是代码示例:

iFitAppDelegate *appDelegate = (iFitAppDelegate *)[[UIApplication sharedApplication] delegate];
NSManagedObjectContext *managedObjectContext = appDelegate.managedObjectContext;

这解决了我的泄漏问题,因此它一定与我的分配方式和释放 NSManagedObjectContext 的方式有关。谢谢你的指点,@albertamg!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-11-05
    • 2011-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-29
    • 1970-01-01
    相关资源
    最近更新 更多