Kel*_*Lau 39 cocoa-touch objective-c ios parse-platform swift
我在各种场合遇到过这个关键字.我知道它应该做什么.但我真的想要更好地理解它.
我注意到的@NSManaged
- 不是基于文档,而是通过重复使用:
@dynamic
Objective-C(我不太了解)PFObject
从Parse SDK
.它通常使用KVC从后端读取/写入值.@NSManaged
如果我没有在初始化程序中初始化,那么为任何变量添加前缀将关闭编译器.正式定义(在核心数据Apple Docs中):
Core Data提供NSManagedObject类的子类中的属性的底层存储和实现.在托管对象子类中的每个属性定义之前添加@NSManaged属性,该属性对应于Core Data模型中的属性或关系.与Objective-C中的@dynamic属性一样,@ NSManaged属性通知Swift编译器将在运行时提供属性的存储和实现.但是,与@dynamic不同,@ NSManaged属性仅适用于Core Data支持.
我从那得到了什么:
使用变量
@NSManaged
应是从编译时检查豁免的东西.
我已经阅读了关于此事的正式文件和其他各种SO问题:
@synthesize vs @dynamic,有什么区别?
我本能地认识到我应该使用它的一些场景.我部分知道它的作用.但我所追求的是对它的作用的更纯粹的理解.
进一步观察:
一个PFObject
在Parse 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
神奇地理解我声明的变量自动使用上面的访问器get
和set
.我想知道它是如何做到的(如果我理解的是真的),以及它做的其他事情.
Dai*_*jan 38
是的,它实际上就像@dynamic一样 - 技术上它甚至可能是相同的.在语义上有一点点差异:
@dynamic说'编译器,不要检查我的属性是否也实现了.可能没有你能看到的代码,但我保证它会在运行时运行'
@NSManaged现在说'编译器,不要检查那些属性,因为我有Core Data来处理实现 - 它会在运行时出现'
所以你甚至可以说:@NSManaged是语法糖,是动态的更窄版本:)
https://github.com/KyoheiG3/DynamicBlurView/issues/2
这里有人甚至使用没有CD的@NSManaged,因为他想要@dynamic行为
归档时间: |
|
查看次数: |
10498 次 |
最近记录: |