看到一份面试题, 说@synthesize和@dynamic的区别:
@dynamic :修饰的属性,其getter和setter方法编译器是不会自动帮你生成。必须自己是实现的。
@synthesize:修饰的属性,其getter和setter方法编译器是会自动帮你生成。不必自己实现,可以指定与属性相对应的成员变量。
看完后有点模糊,记忆中好像还有点什么,有点说不出,就写一下再增加点印象
@synthesize和@dynamic 可能一般都不会用到的,小白的我在日常开发中,只用到了@synthesize 并没有用过@dynamic, 因为@property已经实现了。
@dynamic 修饰的属性编译器不会自动实现getter和setter方法, 编译也不会有问题的。 但是当使用getter和setter方法的时候是会报错的, 因为没有实现。 此时需要手动实现了。
// .h
@property(nonatomic, strong) NSString *name;
// .m 这样写也会报错 Use of undeclared identifier '_name'
@dynamic name;
- (NSString *)name {
return _name;
}
- (void)setName:(NSString *)name {
_name = name;
}
需要在.h文件中添加实例变量的声明
@interface DemoViewController : UIViewController {
NSString *_name;
}
@property(nonatomic, strong) NSString *name;
@end
@synthesize 的另一个用处是, 当在.m文件中同时手动实现了setter和getter方法的时候需要声明一下。
@synthesize name = _name;
其他的用法不知道了。