问题描述
|
我开始在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!