@dynamic 在 Objective-C 中做了啥? [复制]

Posted

技术标签:

【中文标题】@dynamic 在 Objective-C 中做了啥? [复制]【英文标题】:What does @dynamic do in Objective-C? [duplicate]@dynamic 在 Objective-C 中做了什么? [复制] 【发布时间】:2011-06-05 01:12:43 【问题描述】:

Objective-C 有一个称为@dynamic 的功能。

Google 仅列出有关动态类型的结果。

我很少在代码中看到这个,我不明白它的用途。谁能给我解释一下?谢谢。

【问题讨论】:

这是***.com/questions/4524954/…和***.com/questions/1160498/…的副本 意味着这两个问题也是这个问题和彼此的重复,使它们可以互换。我会接受答案并关闭它。 :) 【参考方案1】:

@dynamic 的意思是“我的班级将弄清楚如何在运行时对此做出响应。”使用对象的运行时机制来拦截它通常不会响应的消息。在 Core Data db 用于存储持久数据的情况下,NSManagedObject 将这些转换为对-valueForKey:-setValueForKey: 的调用。

查看斯坦福大学 iPhone 开发课程的 Lecture 12(2010 年秋季)。

【讨论】:

但是我的代码如何在运行时向对象添加属性? 签出<objc/runtime.h>NSObject.h文件 @Time Machine: @dynamic 并不一定意味着该属性将在运行时添加,它只是对编译器说“我知道我已经声明了该属性但没有实现它在这堂课上,但我知道它会在运行时出现”。它可以像已知的实现由超类提供一样简单。 @JeremyP 我从来没有说过。我只是问怎么做。 :) @Time Machine:对不起,我以为您只是在问,因为您看不到如何在运行时添加属性,因此认为@dynamic 毫无意义。我的观点是,是的,有一些方法可以在运行时添加属性,而且它可以像子类化一样简单。

以上是关于@dynamic 在 Objective-C 中做了啥? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

Swift与Objective-C的兼容“黑魔法”:@objc和Dynamic

在Objective-c中获取Black Berry Dynamics的文件长度

Objective-C基础之@synthesize, @dynamic

@dynamic

在 Objective-C 代码中使用 Swift 的缺点?

在 Objective-C 代码中使用 Swift 的缺点?