美文网首页
@synthesize与@dynamic 的理解复习

@synthesize与@dynamic 的理解复习

作者: 呦释原点 | 来源:发表于2018-01-18 15:33 被阅读78次

看到一份面试题, 说@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;

其他的用法不知道了。

相关文章

网友评论

      本文标题:@synthesize与@dynamic 的理解复习

      本文链接:https://www.haomeiwen.com/subject/dnrwoxtx.html