我有实体City。
我还有其他实体:BankBranches、NotaryBranches等。这些实体与City实体是多对一的关系。此外,城市实体与这些实体具有一对多的关系。
那么,如果我只获取 City 实体的城市名称,是否也会获取这些实体对象?我警告获取性能,因为有时我只想获取城市名称,而不是触及所有其他相关对象。
我有实体City。
我还有其他实体:BankBranches、NotaryBranches等。这些实体与City实体是多对一的关系。此外,城市实体与这些实体具有一对多的关系。
那么,如果我只获取 City 实体的城市名称,是否也会获取这些实体对象?我警告获取性能,因为有时我只想获取城市名称,而不是触及所有其他相关对象。
不,Core Data 使用一种称为“故障”的机制来减少使用的内存量。有关于它如何工作的描述:https ://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/CoreData/Articles/cdFaultingUniquing.html
如果您只搜索城市名称,我建议您使用 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 获得跟踪模式。