1

Xcode 4.5 和更高版本会自动合成属性,创建一个实例变量,并在属性名称前加上下划线。但是这在 NSManagedObject 中是如何工作的呢?他们希望您在自定义设置器中使用 KVC 原始方法。那么如果你通过 NSManagedObject 中的下划线 ivar 设置实例变量会发生什么?因为它会绕过 KVC 方法,所以这不会搞砸吗?还是在幕后安全地执行此操作?

4

2 回答 2

0

请注意,与普通属性不同,NSManagedObject属性不是在编译时综合的(因此使用@dynamicfor 实现)。由于不使用编译时综合,因此没有可供您设置的综合实例变量。

相反, 的实例NSManagedObject有一个类似于 an 的私有内部实例NSMutableDictionary来存储它们的状态。动态生成的属性访问器是调用访问私有存储的类似 KVC 的方法的包装器。

于 2013-09-29T18:07:57.110 回答
0

如果您直接访问下划线实例变量,您将绕过NSManagedObject为您完成的工作。您应该使用NSManagedObject 为您的属性自动生成的get 和 set 访问器方法。

苹果的文档状态

当您访问或修改托管对象的属性时,您应该直接使用这些 [accessor] 方法。

如果需要,您可以实现自己的访问器方法,但在这种情况下,除了更改实例变量的值之外,您还必须做一些额外的工作:

您必须确保调用相关的访问和更改通知方法(willAccessValueForKey:、didAccessValueForKey:、willChangeValueForKey:、didChangeValueForKey:、willChangeValueForKey:withSetMutation:usingObjects: 和 didChangeValueForKey:withSetMutation:usingObjects:)。

这应该说明您不能简单地通过直接修改实例变量来获得正确的行为。

于 2013-09-27T20:58:17.740 回答