Xcode 4.5及更高版本自动合成属性,使用前缀作为属性名称的下划线创建实例变量。但是这在NSManagedObject中如何工作?他们希望您在自定义设置器中使用KVC原始方法。那么如果通过NSManagedObject中的下划线ivar设置实例变量会发生什么?不会因为绕过KVC方法而搞砸了吗?还是在幕后安全地做到这一点?
答案 0 :(得分:0)
如果直接访问下划线实例变量,则会绕过NSManagedObject
为您完成的工作。您应该使用NSManagedObject为您的属性自动生成的 get和set访问器方法。
当您访问或修改托管对象的属性时,您应该这样做 直接使用这些[accessor]方法。
如果需要,您可以实现自己的访问器方法,但在这种情况下,除了更改实例变量的值之外,还必须执行其他工作:
您必须确保调用相关的访问权限并进行更改 通知方法(willAccessValueForKey:,didAccessValueForKey:, willChangeValueForKey:,didChangeValueForKey:, willChangeValueForKey:withSetMutation:usingObjects:,and didChangeValueForKey:withSetMutation:usingObjects:)
这应该说明只需直接修改实例变量就无法获得正确的行为。
答案 1 :(得分:0)
请注意,与普通属性不同,NSManagedObject
属性在编译时不会合成(因此使用@dynamic
进行实现)。由于未使用编译时合成,因此没有可供您设置的合成实例变量。
相反,NSManagedObject
的实例具有类似于NSMutableDictionary
的私有内部实例来存储其状态。动态生成的属性访问器是用于调用访问私有存储的类似KVC的方法的包装器。