2011-03-25 50 views

回答

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

为你如何构建你的动态方法,并将其放置到运行时的例子。

核心数据使用此机制来提供访问器。这是非常酷的,一旦你深入它:)

而作为一个方面说明,元编程ObjC不是为了心脏的模糊,不要运送它,直到你grok它,否则你的用户将遭受。

2

使用@dynamic,您需要提供自己的getter/setter方法。

取而代之@synthesize会为您创建getter/setter方法。

+2

有些类会自动生成方法,如NSManagedObject。 – 2011-03-25 13:31:13

5

我引述苹果的书The Objective-C Programming Language

@dynamic

您可以使用关键字@dynamic告诉 ,你将履行物业隐含的 API合同编译器 可通过提供方法 实现直接或在运行时 使用其他机制,如动态 加载代码或动态方法 分辨率。如果编译器无法找到合适的 实现,它将禁止编译器在其它情况下生成 的警告 。只有在知道方法 在运行时可用时,才应该使用它 。

你可以找到pdf副本here

+0

+1:很好的解释。 – FreeAsInBeer 2011-03-25 13:10:24