@NSManaged做了什么?
我在各种场合遇到过这个关键字。 我知道该怎么做。 但我真的想要更好地理解它。
我注意到的@NSManaged
– 不是基于文档,而是通过反复使用:
- 它神奇地取代关键的价值编码。
- 这大致相当于Objective-C中的
@dynamic
(我不太了解) - 我需要它从
Parse SDK
PFObject
。 它通常使用KVC从/向后端读取/写入值。 - 使用
@NSManaged
前缀任何variables会在初始化程序中初始化时closures编译器。
正式的定义(在核心数据苹果文件中):
核心数据提供NSManagedObject类的子类中的属性的基础存储和实现。 在托pipe对象子类中与Core数据模型中的属性或关系相对应的每个属性定义之前添加@NSManaged属性。 与Objective-C中的@dynamic属性一样,@ NSManaged属性通知Swift编译器,在运行时将提供属性的存储和实现。 但是,与@dynamic不同,@ NSManaged属性仅适用于Core Data支持。
我从中得到了什么:
@NSManaged
variables应该免于编译时间检查。
我已经阅读了关于这个问题的正式文档和其他各种SO问题:
@synthesize vs @dynamic,有什么区别?
@dynamic用法常见的情况是什么?
我本能地认识到我应该使用它的一些场景。 我部分知道它做了什么。 但是我所追求的是对它所做的更纯粹的理解。
进一步观察:
Parse SDK
中的PFObject
依赖于Key Value Coding
来访问其值。 PFObject
提供了以下访问器:
objectForKey:
let score = results.objectForKey("descriptionOfResult") //returns the descriptionOfResult value from the results object
setObject:forKey:
results.setObject("The results for a physics exam", forKey: "descriptionOfResult") //sets the value of descriptionOfResult
据我的理解, @NSManaged
神奇的理解,我声明的variables自动使用上述访问器来get
和set
。 我想知道它是如何做到的(如果我理解的是真的),还有其他什么。
是的,它有点像@dynamic – 从技术上讲它甚至可能是相同的。 语义上有一点区别:
@dynamic说'编译器,不要检查我的属性是否也实现了。 可能没有代码可以看到,但我保证它可以在运行时工作“
@ NSManaged现在说'编译器,不要检查这些属性,因为我有核心数据来照顾实现 – 它将在运行时在那里'
所以你甚至可以说:@NSManaged是语法糖是一个更加狭隘的dynamic版本:)
https://github.com/KyoheiG3/DynamicBlurView/issues/2
这里有人甚至用@NSManaged没有CD,因为他想要@dynamic行为
在苹果文档中 ,对于自定义托pipe对象类,他们引用属性示例如… 对我来说似乎没有什么区别,我已经在目标C中使用了@dynamic
,看起来@NSManaged
是在Swift中的replace。
上面提到的答案是正确的。 这是我的理解。
@NSManaged表示当我们运行应用程序时,variables会得到一些值。 Coredata自动为这些道具创buildgetter和setter。 它使编译器沉默警告。
NSmanaged是NSObject的子类。 @NSManaged意味着额外的代码将在运行时被赋予这些道具。 它跟踪对这些属性所做的更改。