核心数据内存泄漏

问题描述

| 我开始在Instruments中测试我的应用,以清除所有内存泄漏。我已经能够清除所有内存泄漏,除了那些与Core Data有关的泄漏。仪器始终将我指向此部分代码
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];

}
任何关于可能导致泄漏的建议,将不胜感激!先感谢您!     

解决方法

        k我上面的代码可能存在泄漏。我只需要在需要时使用一个指向NSManagedObjectContext的指针就可以声明它。这是代码示例:
iFitAppDelegate *appDelegate = (iFitAppDelegate *)[[UIApplication sharedApplication] delegate];
NSManagedObjectContext *managedObjectContext = appDelegate.managedObjectContext;
这解决了我的漏洞,因此它必须与如何分配和释放NSManagedObjectContext有关。感谢您的指点,@ albertamg!