Objective c CoreData-刷新对象不会';t更改注册表对象计数

Objective c CoreData-刷新对象不会';t更改注册表对象计数,objective-c,core-data,Objective C,Core Data,我想释放一些内存,从上下文中释放未使用的ManagedObjects 我不喜欢使用reset,我想使用此功能释放单个对象: [self.managedObjectContext refreshObject:alarm mergeChanges:NO]; 现在,如果我在这次调用之后记录registeredObjects计数,似乎什么都没有改变。我仍然会得到与通话前相同数量的对象 为了帮助您理解此示例,下面是对模型的简单描述: 这是一个带有提醒的典型任务列表。因此,存在与这些任务相关的任务对象和报

我想释放一些内存,从上下文中释放未使用的ManagedObjects

我不喜欢使用
reset
,我想使用此功能释放单个对象:

[self.managedObjectContext refreshObject:alarm mergeChanges:NO];
现在,如果我在这次调用之后记录
registeredObjects计数
,似乎什么都没有改变。我仍然会得到与通话前相同数量的对象

为了帮助您理解此示例,下面是对模型的简单描述: 这是一个带有提醒的典型任务列表。因此,存在与这些任务相关的任务对象和报警对象。任何任务都可以有多个警报

下面是产生此问题的代码:

 Alarm *alarm = [NSEntityDescription insertNewObjectForEntityForName:ENTITY_ALARM inManagedObjectContext:self.managedObjectContext];
    self.task.alarm = [NSSet setWithObject:alarm];

    [self saveContext];

    [self.managedObjectContext refreshObject:alarm mergeChanges:NO];
因为我在
任务的详细视图中
,所以我对在内存中维护
报警
对象不感兴趣


我的问题是:

1)调用
refreshObject

2)这是一种好的做法吗?或者我应该进行重置,避免释放单个对象

为什么调用refreshObject后注册对象的计数没有更改

因为您没有删除它,所以您只是将对象转化为故障(因此它的详细信息将从内存中删除,而不是从磁盘中删除)

这是一种好的做法吗?或者我应该进行重置,避免释放单个对象

重置会破坏上下文中所有对象的内存表示—通常您不希望这样做。刷新会使对象保持有效,只是一个错误。刷新意味着您需要删除对该上下文中任何对象的所有引用,因为它们无效且无法再次使用(您需要重新蚀刻)


通常,刷新是一种很好的方法,但仅当您需要保留对对象的引用并且不太可能经常需要对象详细信息时。如果您不需要该对象,则应将其释放。

您只会对该对象进行故障处理,因此该对象应保持注册状态,但其数据出现故障。我是否可以仅从MOC中删除一个对象而不是刷新?从MOC中删除就是删除,对内存进行故障处理就是刷新-您需要清楚您正在尝试执行的操作,从磁盘删除(删除)或仅仅从RAM中删除(刷新)。我的意思是刷新内存。我之前的评论提到了您的最后一句话“如果您不需要对象,那么您应该释放它。”释放对象就像刷新一样,但您不调用刷新,您只需取消对托管对象实例的引用,核心数据将为您清理内存