首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Objective C- NSManagedObjectContext和NSFetchedResultsController发布处理

Objective C- NSManagedObjectContext和NSFetchedResultsController发布处理
EN

Stack Overflow用户
提问于 2011-11-30 01:25:45
回答 1查看 814关注 0票数 1

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

我的UIApplicationDelegate控制NSManagedObjectContext:

代码语言:javascript
复制
- (NSManagedObjectContext *)managedObjectContext {
if (__managedObjectContext != nil)
{
    return __managedObjectContext;
}

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

我正在使用ManagedObjectContext的实例来显示核心数据对象。就像这样。示例表视图控制器:

代码语言:javascript
复制
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”中释放了上下文。

我尝试过将上下文保留在处理程序类中,如下所示:

代码语言:javascript
复制
- (NSManagedObjectContext *)getManagedObjectContext
{
NSManagedObjectContext *context = [self.managedObjectContext autorelease];

return context;
}

与NSManagedObjectContext对象和实例交互的最佳方式是什么?Thx和sry回答我的愚蠢的问题:)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-11-30 03:31:43

retainCount返回的值是无意义的。别费心看它了。

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8315028

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档