2011-11-29 65 views
1

我需要一些关于使用NSManagedObjectContext对象进行内存管理的信息。 我在ipad-App上编程,我使用核心数据对象。Objective-C NSManagedObjectContext和NSFetchedResultsController发布处理

我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这样吗?因为,尽管我在“viewDidUnload”和“dealloc”中释放了上下文,但在我测试我的APP时,上下文的retainCount增加到了10。

I`ve试图保留上下文处理程序类是这样的:

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

return context; 
} 

请告诉我用的NSManagedObjectContext交互的最佳方法 - 对象和实例? Thx和sry为我的问题:)

+1

第二个代码块中的self.managedObjectContext属性是强/保留属性还是弱/赋值? – cocoahero

+0

“对象”和“实例”的含义相同。 – Caleb

+0

@cocoahero其保留财产 –

回答

1

retainCount返回的值是没有意义的。不要打扰它看。

使用泄漏工具或heapshot analysis来确定您的应用程序是否泄漏。

+0

Thx,我会看看它。 –

相关问题