2011-06-21 4 views
2

私はInstrumentsでアプリケーションのテストを開始してメモリリークを解決しました。私はコアデータに関連するもの以外のすべてのメモリリークを解決することができました。楽器は常に、コードのこのセクションに私を指す:私は(無効)にdeallocセクションでmanagedObjectContextを解放コアデータのメモリリーク

@interface UpperBody : UITableViewController <UITableViewDelegate, UITableViewDataSource> { 

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

} 

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

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

私は次のコードで私のヘッダファイルに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]; 

} 

どのようなリークを引き起こす可能性がありますかについてのアドバイス大いにありがとう!前もって感謝します!

+0

あなたの 'dealloc'メソッドで' exercises'を解放しますか? – albertamg

+0

さて、私は私のdeallocメソッドで演習をリリースします。 = /なぜInstrumentがNSMutableArray * mutableFetchResultsを指しているのかよくわかりません。私はmanagedObjectContext、results、およびmutableFetchRequestsを解放します。 –

+0

インストゥルメントは、リークされたオブジェクトがどこにリークされたかを示します。 – albertamg

答えて

0

k上記のコードではおそらくリークがありました。必要に応じてポインタを使うだけでNSManagedObjectContextを宣言しています。ここでは、コードのサンプルです:

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

これは私のリークを修正し、それは私が割り当てられ、NSManagedObjectContextを解放した方法としなければならなかったしている必要があります。ポインタをありがとう、@ albertamg!

+0

あなたは大歓迎です! – albertamg