实例变量和属性-ObjectiveC

  1. @public 修饰的实例变量在类外部有->访问
  2. 定义一个属性会自动有如下规则
    1.自动生成访问方法
    2.自动生成实例变量
    3.可以更简单地调用访问方法
  3. @synthessize后面只能跟属性,不能跟实例变量,并为属性生成getter,setter方法
//属性的实现
@synthesize brand=(brand), price(=price), color; //属性的实现可以省略
//自动生成一个实例变量brand... 绑定到相应的属性brand...上
//2.setter和getter方法对实例变量brand进行操作

如果不写属性的实现

//如果不写属性的实现, 系统默认补上的形式
@synthesize brand = _brand, price = _price, color = _color;
//1.自动生成一个实例变量_brand
//2.setter和getter方法对实例变量_brand进行操作
  1. @dynamic关键字修饰告诉编译器属性自动生成的setter,getter方法无效,用户自定义访问方法。
  2. 当重写了属性的setter,getter方法后,系统默认补上的@synthesize age = _age就失效了
//当同时重写setter和getter后, @synthesize age = _age; 就失效了
//解决方案:自己补上 @synthesize age = _age
@synthesize age = _age;
//当属性生成的setter方法不满足需求时, 可以重写setter方法
- (void)setAge:(NSInteger)age {
    if (age > _age) {
        _age = age;
    }
}
//当属性生成的getter方法不满足需求时, 可以重写getter方法
- (NSInteger)age {
    return _age - 2;
}

推荐阅读更多精彩内容