Цель C - обработка релизов NSManagedObjectContext и NSFetchedResultsController - PullRequest
1 голос
/ 29 ноября 2011

Мне нужна информация об управлении памятью с помощью объектов NSManagedObjectContext.Я программирую на ipad-App и работаю с основными объектами данных.

Мой UIApplicationDelegate контролирует NSManagedObjectContext:

- (NSManagedObjectContext *)managedObjectContext {
if (__managedObjectContext != nil)
{
    return __managedObjectContext;
}

NSPersistentStoreCoordinator *coordinator = [self persistentStoreCoordinator];
if (coordinator != nil)
{
    __managedObjectContext = [[NSManagedObjectContext alloc] init];
    [__managedObjectContext setPersistentStoreCoordinator:coordinator];
}
return __managedObjectContext;
}

Я использую экземпляры ManagedObjectContext для отображения моих основных объектов данных.как это.пример контроллера табличного представления:

CRMAppDelegate *appDelegate = (CRMAppDelegate*) [[UIApplication sharedApplication] delegate];
self.managedObjectContext = appDelegate.managedObjectContext;

// Initialize NSFetchedResultsController to retrieve data from the database.
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
[fetchRequest setEntity:[NSEntityDescription entityForName:@"Contact" inManagedObjectContext:self.managedObjectContext]];

// Sort results ascending by last name, first name.
NSSortDescriptor *sortDescriptorFirstLetterLastName = [[NSSortDescriptor alloc] initWithKey:@"firstLetterOfLastName" ascending:YES];
NSSortDescriptor *sortDescriptorLastName = [[NSSortDescriptor alloc] initWithKey:@"name_last" ascending:YES];
NSSortDescriptor *sortDescriptorFirstName = [[NSSortDescriptor alloc] initWithKey:@"name_first" ascending:YES];
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptorFirstLetterLastName, sortDescriptorLastName, sortDescriptorFirstName, nil];
[fetchRequest setSortDescriptors:sortDescriptors];
[sortDescriptors release];
[sortDescriptorFirstLetterLastName release];
[sortDescriptorFirstName release];
[sortDescriptorLastName release];

/*
if ([self.managedObjectContext countForFetchRequest:fetchRequest error:NULL] == 0) {
    [self reloadContactData];
}
 */

// Create NSFetched Results controller instance.
fetchedResultsController = [[NSFetchedResultsController alloc]
                            initWithFetchRequest:fetchRequest
                            managedObjectContext:self.managedObjectContext
                            sectionNameKeyPath:@"firstLetterOfLastName"
                            cacheName:@"ContactsViewCache"];
[fetchRequest release];
self.fetchedResultsController.delegate = self;

// Load data.
NSError *error;
if (![fetchedResultsController performFetch:&error]) {
    // Update to handle the error appropriately.
    NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
}

Это нормально для экземпляра NSManagedObjectContext, как это?Потому что retainCount контекста увеличивается до 10, пока я тестирую свое приложение, хотя я освобождаю контекст в «viewDidUnload» и «dealloc».

Я пытался сохранить контекст в классе обработчика следующим образом:

- (NSManagedObjectContext *)getManagedObjectContext
{
NSManagedObjectContext *context = [self.managedObjectContext autorelease];

return context;
}

Каков наилучший способ взаимодействия с NSManagedObjectContext - объектами и экземплярами?Спасибо и прошу прощения за мой тупой вопрос:)

1 Ответ

1 голос
/ 29 ноября 2011

Значение, возвращаемое retainCount, не имеет смысла.Не беспокойтесь о том, чтобы посмотреть на него.

Используйте инструмент Leaks или анализ кучи , чтобы определить, не протекает ли ваше приложение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...