Cocoa中的@dynamic属性访问器

时间:2012-01-26 12:28:57

标签: cocoa objective-c-runtime

到目前为止,我只看到使用@dynamic属性访问器定义的CoreData。还有哪些方法可以让属性在Cocoa对象中获取动态访问器,以便将它们标记为@dynamic

3 个答案:

答案 0 :(得分:1)

您可以在运行时通过响应+resolveInstanceMethod:(核心数据所做的)或使用-forwardInvocation:进行模拟来生成访问者。我已经看到这在用于支持任意(对象值)属性的模型模型对象中使用,尽管在这种情况下属性是在未实现的类别中声明的,因此没有使用明确的@dynamic。 (实际上,我写过a stupid hack,这使NSDictionary以这种方式行事。)

我可以想象一种类似的方法被用于代理对象。

答案 1 :(得分:0)

默认情况下,所有声明的属性都是@dynamic,但您可以将它们声明为@synthesize。 @dynamic意味着,您将在类中提供getter和setter实现,这可能与任何i-var都没有关联。

答案 2 :(得分:0)

您可以自己声明属性动态。例如,如果getter和setter方法是由超类实现的,那么这可能很有用。