@NSManaged做什么?

Kel*_*Lau 39 cocoa-touch objective-c ios parse-platform swift

我在各种场合遇到过这个关键字.我知道它应该做什么.但我真的想要更好地理解它.

我注意到的@NSManaged- 不是基于文档,而是通过重复使用:

  1. 它神奇地取代了键值编码.
  2. 它大致相当于@dynamicObjective-C(我不太了解)
  3. 我需要它继承PFObjectParse SDK.它通常使用KVC从后端读取/写入值.
  4. @NSManaged如果我没有在初始化程序中初始化,那么为任何变量添加前缀将关闭编译器.

正式定义(在核心数据Apple Docs中):

Core Data提供NSManagedObject类的子类中的属性的底层存储和实现.在托管对象子类中的每个属性定义之前添加@NSManaged属性,该属性对应于Core Data模型中的属性或关系.与Objective-C中的@dynamic属性一样,@ NSManaged属性通知Swift编译器将在运行时提供属性的存储和实现.但是,与@dynamic不同,@ NSManaged属性仅适用于Core Data支持.

我从那得到了什么:

使用变量@NSManaged应是从编译时检查豁免的东西.

我已经阅读了关于此事的正式文件和其他各种SO问题:

@synthesize vs @dynamic,有什么区别?

@dynamic使用的常见情况是什么?

我本能地认识到我应该使用它的一些场景.我部分知道它的作用.但我所追求的是对它的作用的更纯粹的理解.

进一步观察:

一个PFObjectParse SDK依赖于Key Value Coding访问它的值.本PFObject提供了以下存取:

objectForKey:

let score = results.objectForKey("descriptionOfResult") 
//returns the descriptionOfResult value from the results object
Run Code Online (Sandbox Code Playgroud)

setObject:forKey:

results.setObject("The results for a physics exam", forKey: "descriptionOfResult") 
//sets the value of descriptionOfResult 
Run Code Online (Sandbox Code Playgroud)

根据我的理解,@NSManaged 神奇地理解我声明的变量自动使用上面的访问器getset.我想知道它是如何做到的(如果我理解的是真的),以及它做的其他事情.

Dai*_*jan 38

是的,它实际上就像@dynamic一样 - 技术上它甚至可能是相同的.在语义上有一点点差异:

@dynamic说'编译器,不要检查我的属性是否也实现了.可能没有你能看到的代码,但我保证它会在运行时运行'

@NSManaged现在说'编译器,不要检查那些属性,因为我有Core Data来处理实现 - 它会在运行时出现'

所以你甚至可以说:@NSManaged是语法糖,是动态的更窄版本:)


https://github.com/KyoheiG3/DynamicBlurView/issues/2
这里有人甚至使用没有CD的@NSManaged,因为他想要@dynamic行为

  • @ Daij-Djan实际上,从运行时的角度来看,`@ NSManaged`似乎与`@ dynamic`非常相似.http://cocoaexposed.com/2015/nsmanaged-vs-dynamic-in-swift/ (2认同)