这是@property的两个对应词,@synthesize和@dynamic
1.@synthesize告诉编译器:如果你没有手动实现setter和getter方法,编译器会自动帮你生成
2.@dynamic告诉编译器:用户需要自己实现setter和getter方法,不自动生成。假如一个属性被声明为 @dynamic var,然后你没有提供 @setter方法和 @getter 方法,编译的时候没问题,但是当程序运行到 instance.var = someVar,由于缺 setter 方法会导致程序崩溃;或者当运行到 someVar = var时,由于缺 getter 方法同样会导致崩溃。编译时没问题,运行时才执行相应的方法,这就是所谓的动态绑定。