case 0:
{
NSFetchRequest *request=[NSFetchRequest fetchRequestWithEntityName:@"Grade"];
NSPredicate *predicate=[NSPredicate predicateWithFormat:@"abbr==%@",@"UNDEF"];
[request setPredicate:predicate];
NSArray *result=[_context executeFetchRequest:request error:nil];
Grade *grade=[result lastObject];
duplicate.grade=grade;
break;
}
...
[self backgroundSaveContext];
非常简单的问题。 “案例”完成后检索到的对象会发生什么?我应该对物体进行故障还是ARC管理它?此代码不在主线程中执行。
答案 0 :(得分:2)
ARC不管理托管对象的故障。
您正在为从提取中检索到的对象设置duplicate.grade
。如果这是一个强引用,托管对象将被强烈保留 - 但这不会影响触发故障。只有当您访问该对象的属性时才会触发故障。
使用默认的提取请求选项从商店获取托管对象时,托管对象未实现 - 属性没有附加数据。这是故障状态。当您访问托管对象属性时,Core Data"会触发故障" - 它返回到商店以获取属性值,并使用这些值填充托管对象。托管对象上的属性访问器方法调用willAccessValueForKey:
,它将实现(触发)故障。