iOS核心数据 - 获取一个实体对象是否会自动从关系实体中获取所有对象?

时间:2012-08-24 10:32:53

标签: ios performance core-data nsfetchrequest

我有实体城市

我还有其他实体: BankBranches NotaryBranches 等。这些实体是多对一城市的关系实体。 城市实体与这些实体的关系也有一对多

因此,如果我只获取City实体的城市名称,那么这些实体对象是否也被获取?我正在警告抓取性能,有时我想只获取城市名称,而不是触及所有其他相关对象。

2 个答案:

答案 0 :(得分:1)

不,Core Data使用称为“faulting”的机制来减少使用的内存量。有关它的工作原理的描述:https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/CoreData/Articles/cdFaultingUniquing.html

答案 1 :(得分:1)

如果您只搜索城市名称,我建议您使用NSFetchRequest实例的setPropertiesToFetch:方法提高搜索效率。您将指定一个表示名称的NSPropertyDescription。以下是它的工作原理:

NSFetchRequest *fetchRequest=[[NSFetchRequest alloc] init];
NSEntityDescription *entity=[NSEntityDescription entityForName:@"YourEntity" inManagedObjectContext:context];
[fetchRequest setEntity:entity];
[fetchRequest setResultType:NSDictionaryResultType];
NSDictionary *properties=[entity propertiesByName];
[fetchRequest setPropertiesToFetch:[NSArray arrayWithObject:[properties valueForKey:@"yourPropertyName"]]];

使用此获取请求,您将获取每个获取的对象的字典,并且您获得的唯一属性是您获取的属性。此方法的唯一缺点是您将无法在完全持久跟踪模式下使用NSFetchedResultsController。基本上,你没有从NSFetchedResultsController使用它获得跟踪模式。

相关问题