@synthesize和@dynamic

要彻底搞清楚这两个关键字需弄明白成员变量和成员属性的区别;

成员变量,OC1.0的时候我们为interface同时声明了属性和底层实例变量,那时,属性是oc语言的一个新的机制,并且要求你必须声明与之对应的实例变量

@interface ViewController : UIViewController
{
// 成员变量
        @public
            NSString* publicString;
       
        @protected
            NSString* protectedString;
       
        @private
            NSString* privateString;
}
@end

OC2.0及以后,@property它将自动创建一个以下划线开头的实例变量。因此,在这个版本中,我们不再为interface声明实例变量。变成我们常见的形式

@interface MyViewController :UIViewController
@property (nonatomic, strong) UIButton *myButton;
@end

我们会在项目中看见这种写法,@synthesize就是告诉编译器给我们自动生成setter/getter方法;你还可以指定属性等于指定的变量,如:@synthesize myButton(属性) = xxx(变量),这就是为什么要先将变量和属性的区别了;

@interface ViewController ()
@property (nonatomic, strong) UIButton *myButton;
@end

@implementation ViewController
@synthesize myButton;

以之相反的@dynamic就是告诉编译器setter/getter由我们自己生成,不需要编译器帮忙生成,一般当一个类实现协议,但这个协议里面有一个属性没有实现就会报错警告,此时用@dynamic就可以告诉编译器这个属性我们自己处理。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。