Я думаю, что у меня есть ответ.
В шаблоне контроллера базовых данных навигации по умолчанию AppDelegate выполняет следующие действия:
- (void)awakeFromNib {
RootViewController *rootViewController = (RootViewController *)[navigationController topViewController];
rootViewController.managedObjectContext = self.managedObjectContext;
}
и RootViewController имеет следующий код:
@interface PractitionerAppDelegate : NSObject <UIApplicationDelegate> {
UIWindow *window;
UINavigationController *navigationController;
@private
NSManagedObjectContext *managedObjectContext_;
NSManagedObjectModel *managedObjectModel_;
NSPersistentStoreCoordinator *persistentStoreCoordinator_;
}
@property (nonatomic, retain) IBOutlet UIWindow *window;
@property (nonatomic, retain) IBOutlet UINavigationController *navigationController;
@property (nonatomic, retain, readonly) NSManagedObjectContext *managedObjectContext;
@property (nonatomic, retain, readonly) NSManagedObjectModel *managedObjectModel;
@property (nonatomic, retain, readonly) NSPersistentStoreCoordinator *persistentStoreCoordinator;
- (NSString *)applicationDocumentsDirectory;
@end
плюс
- (void)dealloc {
[managedObjectContext_ release];
[managedObjectModel_ release];
[persistentStoreCoordinator_ release];
[navigationController release];
[window release];
[super dealloc];
}
Другими словами, когда managedObjectContext устанавливается кодом, как указано выше, или в tableView: didSelectRowAtIndexPath, тогда его необходимо освободить.
С другой стороны, если managedObjectContext не передается непосредственно в View Controller, и для установки управляемогоObjectContext используется следующий код ...
if (managedObjectContext_ == nil) {
managedObjectContext_ = [(PractitionerAppDelegate *)[[UIApplication sharedApplication] delegate] managedObjectContext];
}
... тогда managedObjectContext не должен быть освобожден.
Здесь гораздо более короткий ответ. /2810391/pochemu-mne-ne-nuzhno-osvobozhdat-managedobjectcontext-vo-vtorom-tableviewcontroller По-видимому, даже несмотря на то, что MOC выделен в контроллере вида, это не имеет никакого эффекта, поскольку MOC принадлежит AppDelegate.