首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >释放managedObjectContext对象%c

释放managedObjectContext对象%c
EN

Stack Overflow用户
提问于 2012-06-03 20:18:49
回答 2查看 861关注 0票数 0

我尝试使用分析工具来查看内存泄漏,而Xcode在这一点上给了我一个内存泄漏:

.h

代码语言:javascript
复制
@property (strong, nonatomic) NSManagedObjectContext *managedObjectContext;

.m

代码语言:javascript
复制
@synthesize managedObjectContext = __managedObjectContext;

然后在代码中我这样做:

代码语言:javascript
复制
AppDelegate *appController = [[UIApplication sharedApplication] delegate];

self.managedObjectContext = [[NSManagedObjectContext alloc] init];
[self.managedObjectContext setUndoManager:nil];
[self.managedObjectContext setPersistentStoreCoordinator: [appController persistentStoreCoordinator]];

dealloc中是这样的:

代码语言:javascript
复制
- (void)dealloc
{    
    [__managedObjectContext release];
    [super dealloc];
}

它在这一行上给了我一个内存泄漏:

代码语言:javascript
复制
[self.managedObjectContext setUndoManager:nil];

对于此对象:

代码语言:javascript
复制
self.managedObjectContext = [[NSManagedObjectContext alloc] init];

我已经在dealloc中发布了它,为什么会有内存泄漏?

EN

回答 2

Stack Overflow用户

发布于 2012-06-03 20:35:25

您的_managedObjectContext泄漏,因为它的保留计数增加了两次,但您只释放它一次。您已经将属性设置为strong,这意味着当对象被分配给它时,它将保留该对象。但您也可以在不自动释放(或手动释放)的情况下分配managedObjectContext。因此,错误在这一行中:

代码语言:javascript
复制
self.managedObjectContext = [[NSManagedObjectContext alloc] init];

您分配的对象的保留计数为1,但合成属性将再次保留它,因此它的保留计数为2。当您在取消分配中释放它时,它将保留,因为它的保留计数仍为1。

您需要做的是自动释放您分配的对象:

代码语言:javascript
复制
self.managedObjectContext = [[[NSManagedObjectContext alloc] init] autorelease];

或者不调用合成的setter,而是直接分配给_managedObjectContext

代码语言:javascript
复制
_managedObjectContext = [[NSManagedObjectContext alloc] init];

我建议使用前者,因为如果_managedObjectContext不为零,则后者会泄漏。但是,如果您在赋值之前确定_managedObjectContext为零,则可以选择您想要的任何一个。

票数 2
EN

Stack Overflow用户

发布于 2012-06-03 20:24:11

这行..。

代码语言:javascript
复制
self.managedObjectContext = [[NSManagedObjectContext alloc] init];

将保留计数减去两个,一个用于分配,另一个用于属性上的“...increases”。

尝试:

代码语言:javascript
复制
__managedObjectContext = [[NSManagedObjectContext alloc] init];
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10870250

复制
相关文章

相似问题

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