首页 > 代码库 > @dynamic与@synthesize的差别

@dynamic与@synthesize的差别

如今非常多时候我们都已经不再使用@synthesizekeyword了,可是须要了解当中的原理:

一、@dynamic与@synthesize的差别
@property有两个相应的词。一个是@synthesize,一个是@dynamic。假设@synthesize和@dynamic都没写。那么默认的就是@syntheszie var = _var;

@synthesize的语义是假设你没有手动实现setter方法和getter方法,那么编译器会自己主动为你加上这两个方法。

@dynamic告诉编译器,属性的setter与getter方法由用户自己实现,不自己主动生成。(当然对于readonly的属性仅仅需提供getter就可以)。

假如一个属性被声明为@dynamic var,然后你没有提供@setter方法和@getter方法,编译的时候没问题,可是当程序执行到instance.var =someVar,因为缺setter方法会导致程序崩溃;或者当执行到 someVar = var时,因为缺getter方法相同会导致崩溃。编译时没问题,执行时才执行对应的方法,这就是所谓的动态绑定。

如今我们不再使用@synthesize,所以假设我们没实用这个keyword@dynamic修饰属性的时候,我们默认是实现了getter和setter方法。

所以我们在数据库中用到core Data的时候。我们须要属性和表中的记录的gukeyword段进行相应,这个时候,我们将会须要开发人员管理绑定,还须要开发人员实现相应的属性的setter和getter方法。

@dynamic与@synthesize的差别