iPad/iPhone中的@dynamic是什么?

11
我想知道在Objective-C中,@dynamic是什么意思以及它是如何工作的。请帮忙解答一下。
3个回答

13

@dynamic意味着你将在运行时动态提供这些方法的实现。

http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/ObjCRuntimeGuide/Articles/ocrtDynamicResolution.html

该链接中包含了详细信息,但基本上使用@dynamic意味着你承诺在运行时提供属性承诺的方法实现。

特别是要看这里:

http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSObject_Class/Reference/Reference.html

这里有一个示例,展示如何构造动态方法并将其放入运行时。

Core Data使用此机制来提供访问器。一旦深入研究,它非常酷!:)

另外,作为一个旁注,ObjC中的元编程并不适合脆弱的人,除非你明确理解了它,否则请不要发布它,否则你的用户将会遭受苦难。


6

我引用了苹果公司的书 The Objective-C Programming Language:

@dynamic

你可以使用 @dynamic 关键字告诉编译器,你将通过直接提供方法实现或在运行时使用其他机制(例如代码的动态加载或动态方法解析)来满足属性隐含的 API 合同。它会抑制编译器如果找不到合适的实现而产生的警告。只有当你知道这些方法在运行时可用时才应该使用它。

你可以在这里找到PDF副本。


2
使用 @dynamic 需要您自己提供 getter/setter 方法。
而 @synthesize 则会为您创建 getter/setter 方法。

2
有些类会自动生成方法,比如NSManagedObject。 - Peter DeWeese

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接