@synthesized与@dynamic的区别与使用方法

前言:

在使用@property定义属性时,有两个对应的关键字,即@synthesize@dynmic,如果都没有使用这两个关键字时,它有个默认值是@syntheszie var = _var;

@synthesize与@dynmic的区别:

  • @synthesize让编译器自动生成getter/setter方法。
  • @dynmic让编译器不自动生成getter/setter方法
  • @synthesize可以使用成员变量方式去访问和赋值,如_var = @"xx";,而@dynmic不可以,因为它不会自动合成成员变量。

用法:

@synthesize

// 自动生成getter/setter方法,合成成员变量(可使用_var方式访问属性)
@synthesize var = _var;

// 自动生成getter/setter方法,不合成成员变量(不可使用_var方式访问属性)
@synthesize var;

@dynmic

// 不自动生成getter/setter方法,不合成成员变量(不可使用_var方式访问属性)
@dynmic var;

// 语法错误,不允许这么定义
@dynmic var = _var;

使用场景:

  1. 父类定义了某个属性,子类想重新定义这个属性时,需要明确使用@synthesize@dynmic,不然会有警告。但是具体是使用哪一个,就看你需不需要getter/setter方法了。
  2. CoreData定义属性都用@dynamic,CoreData会在运行时动态为所有属性生成getter/setter方法,所以使用@dynamic告诉编译器不要自动生成getter/setter方法。

你可能感兴趣的:(@synthesized与@dynamic的区别与使用方法)