What does @NSManaged do?
我在各种场合都遇到过这个关键词。我知道它应该做什么。但我真的想更好地理解它。
我注意到的关于
正式定义(在Apple文档的核心数据中):
Core Data provides the underlying storage and implementation of properties in subclasses of the NSManagedObject class. Add the @NSManaged attribute before each property definition in your managed object subclass that corresponds to an attribute or relationship in your Core Data model. Like the @dynamic attribute in Objective-C, the @NSManaged attribute informs the Swift compiler that the storage and implementation of a property will be provided at runtime. However, unlike @dynamic, the @NSManaged attribute is available only for Core Data support.
我从中得到了什么:
Variables with
@NSManaged shall be exempt from compile time checks for something.
我已经阅读了正式的文档和其他各种有关此问题的SO问题:
@合成vs@dynamic,有什么区别?
@dynamic用法的常见情况是什么?
我本能地认识到一些我应该使用它的场景。我部分了解它的作用。但我所寻求的是对它所做事情的更纯粹的理解。
进一步观察:
1 2 | let score = results.objectForKey("descriptionOfResult") //returns the descriptionOfResult value from the results object |
1 2 | results.setObject("The results for a physics exam", forKey:"descriptionOfResult") //sets the value of descriptionOfResult |
据我所知,
是的,它实际上有点像@dynamic——从技术上讲,它甚至可能是相同的。在语义上有一点区别:
@dynamic说"编译器,不要检查我的属性是否也实现了。"你可能看不到任何代码,但我保证它在运行时工作。
@nsmanaged现在说"编译器,不要检查那些属性,因为我有核心数据来处理实现——它将在运行时出现。"
所以你甚至可以说:@nsmanaged是一个更窄的动态版本的语法糖:)
https://github.com/kyoheig3/dynamicblurview/issues/2
这里甚至有人使用@nsmanaged而不使用cd,因为他想要@dynamic行为
在Apple文档中,对于自定义托管对象类,它们引用诸如…在我看来没有区别,我在目标C中使用了
以上答案是正确的。这是我的理解。
@nsmanaged表示当我们运行应用程序时,变量将获得一些值。coredata自动为这些道具创建getter和setter。它会使编译器停止运行以获取警告。
nsmanaged是nsObject的子类。@nsmanaged意味着将在运行时为这些属性提供额外的代码。它跟踪对这些属性所做的更改。