美文网首页
iOS中@property,@dynamic,@synthesi

iOS中@property,@dynamic,@synthesi

作者: 一抹相思泪成雨 | 来源:发表于2020-11-10 17:23 被阅读0次

@property

如果我们使用@property,在.m 中@dynamic和@synthesize 均不写
默认是@syntheszie var = _var;
编译器自动实现:
1.生成getter和setter的声明;
2.生成_name的成员变量;
3.生成getter和setter的实现;

@property (nonatomic, strong) NSString *name; // 属性定义
-(void)setName:(NSString *)name {
    if (_name!= name) {
        _name = name;
    }
}
-(NSString *)name {
    return _name;
}

@ synthesize

@synthesize的语义:如果没有手动实现setter方法和getter方法,那么编译器会自动为你加上这两个方法。如果实现那么取你实现的setter方法和getter方法。

@synthesize name = _testName; // 使用属性后,自定义成员变量名称,可以进行更名
-(void)setName:(NSString *)name {
    if (_testName != name) {
        _testName = name;
    }
}
-(NSString *)name {
    return _testName;
}

@dynamic

@dynamic告诉编译器,属性的setter与getter方法用户自己实现,不自动生成。
如果没有提供@setter方法和@getter方法,编译的时候没问题。
但是当使用点语法设置值或取值时会崩溃

@property (nonatomic, strong) NSString *name; // 属性定义

@implementation Person  {
    NSString *_testName; // 成员变量名称,自定义
}
@dynamic name;
-(void)setName:(NSString *)name {
    if (_testName != name) {
        _testName = name;
    }
}
-(NSString *)name {
    return _testName;
}

相关文章

网友评论

      本文标题:iOS中@property,@dynamic,@synthesi

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