我正在使用use Doctrine\ORM\Query\ResultSetMapping;
$start = '';
$end = '';
$rsm = new ResultSetMapping();
$rsm->addEntityResult('CalendarData', 'c');
$rsm->addFieldResult('c', 'id', 'id');
$rsm->addFieldResult('c', 'start', 'start');
$rsm->addFieldResult('c', 'end', 'end');
$query = $this->_em->createNativeQuery('select * from calendar_data where LEAST(c.end, ?) - GREATEST(c.start, ?) > 0;', $rsm);
$query->setParameter(1, $end);
$query->setParameter(2, $start);
$calendarData = $query->getResult();
NSInMemoryStoreType
来维护内存中的实体和关系,因为我不想将其写入磁盘。
所以我计划在某些时候清理内存中的对象图,因为应用程序内存不断增加,因为核心数据对象引用仍在内存中。
如何从内存对象图中删除/重置/删除整个核心数据实体和关系以清理应用内存使用情况?
是否有任何优化的方法可以在需要时处理NSPersistentStoreCoordinator
和清理内存?
请注意:我的应用的部署目标是iOS 8.0及更高版本。因此,清理API也应该适用于iOS 8目标。
谢谢!
答案 0 :(得分:0)
只需删除实体,就像使用任何核心数据设置一样。
答案 1 :(得分:0)
我找到了解决内存存储上下文的工作。这种解决方法是从内存中的对象图中清除一些内存,而不是所有内容。
if inMemoryManagedObjectContext != nil{
if let stores = inMemoryManagedObjectContext.persistentStoreCoordinator?.persistentStores{
for store in stores{
do{
try inMemoryManagedObjectContext.persistentStoreCoordinator?.remove(store)
}catch{
print("Cleanup InMemoryManagedObjectContext error;\(error)")
}
}
}
inMemoryManagedObjectContext = nil
}
感谢Jon Rose:如果我必须删除所有实体,那么由于我有更多实体,它会给出性能问题。此外,我不确定删除实体是否会立即清理内存。
感谢Sandeep Bhandari:PersistentContainer可用于iOS 10及更高版本,我的应用程序应支持iOS 8。
上下文重置也不会对内存清理产生任何影响。如果有任何其他方法可以清理内存上下文/ persistentStoreCoordinator,请告诉我。
谢谢!