@dynamic使用的常见情况是什么?

时间:2010-12-24 07:42:10

标签: iphone dynamic properties nsmanagedobject synthesizer

@synthesize和@dynamic之间存在先前的post差异。

我想从通常如何使用@dynamic的角度了解更多关于动态的信息。

通常我们将@dynamic与NSManagedObject一起使用

// Movie.h
@interface Movie : NSManagedObject {
}
@property (retain) NSString* title;
@end

// Movie.m
@implementation Movie
@dynamic title;
@end

实际上,根据对@dynamic的理解,在编译时没有生成getter / setter,因此有必要实现自己的getter / setter。

我的问题是,在这个NSManagedObject案例中,超类NSManagedObject中getter / setter的粗略实现是什么?

除了上述情况,还有多少其他案例要使用@dynamic?

谢谢,

1 个答案:

答案 0 :(得分:4)

@dynamic向编译器指示您计划为访问器提供自己的实现,即使编译器当前无法看到它们。如果省略@dynamic而不使用@synthesize,则会发生以下两种情况之一:

  1. 如果你只提供了半个访问者(例如,readwrite属性上没有setter的getter),或者你正在使用GCC,编译器会发出警告。
  2. 如果您正在使用Clang编译代码,将自动为您生成正确的访问者。(默认情况下,Synthesize不受官方支持。)
  3. 因此,

    @dynamic可以防止编译器执行上述任一操作。如果以非常动态的方式实现属性(如运行时函数),这也可能会派上用场,但这很少需要。