@dynamic与@synthesize的区别

来源:互联网 发布:r390清零软件 编辑:程序博客网 时间:2024/05/18 03:04

举例:@property(nonatomic,getter=isOn) BOOL on;

在定义property的时候 ,指定了getter ,首先会在 implementation里面找isOn方法 作为 “on”属性的getter方法,如果没有找到的话,就会自动生成一个默认的 (BOOL)on { return _on; }  _on是默认的默认生成的实例变量。如果在implementation里面使用@dynamic限定了“on”属性那么就必须定义getter指定的函数isOn,否则运行起来就要找不到这个方法的错误。


@dynamic 意思是由开发人员提供相应的代码:对于只读属性需要提供 getter,对于读写属性需要提供 setter 和 getter。
@synthesize 意思是,除非开发人员已经做了,否则由编译器生成相应的代码,以满足属性声明。

在声明property属性后,有2种实现选择

@synthesize

编译器期间,让编译器自动生成getter/setter方法。

当有自定义的存或取方法时,自定义会屏蔽自动生成该方法

 @dynamic

告诉编译器,不自动生成getter/setter方法,避免编译期间产生警告

然后由自己实现存取方法

或存取方法在运行时动态创建绑定:主要使用在CoreData的实现NSManagedObject子类时使用,由Core Data框架在程序运行的时动态生成子类属性


0 0
原创粉丝点击