天天看點

iOS - @property 和 @synthesize 總結

@property

  • 用在

    @interface

  • 用來自動生成

    setter

    getter

    的聲明
  • @property int age;

    就可以代替下面的兩行
- (int)age; // getter
- (void)setAge:(int)age; // setter
           

@synthesize

  • 用在

    @implementation

  • 用來自動生成

    setter

    getter

    的實作
  • @synthesize age = _age;

    就可以代替
- (int)age
{
    return _age;
}

- (void)setAge:(int)age
{
    _age = age;
}
           

@synthesize 的細節

@synthesize age = _age;

  • setter 和 getter 實作中會通路成員變量 _age
  • 如果成員變量 _age 不存在,就會自動生成一個 @private 的成員變量 _age

@synthesize age;

  • setter 和 getter 實作中會通路成員變量 age
  • 如果成員變量 age 不存在,就會自動生成一個 @private 的成員變量 age

手動實作

  • 若手動實作了 setter 方法,編譯器就隻會自動生成 getter 方法
  • 若手動實作了 getter 方法,編譯器就隻會自動生成 setter 方法
  • 若同時手動實作了 setter 和 getter 方法,編譯器就不會自動生成不存在的成員變量

@property 新特性

  • 自動 Xcode 4.x 後,@property 就獨攬了 @synthesize 的功能,也就是說,@property 可以同時生成 setter 和 getter 的聲明和實作
  • 預設情況下, setter 和 getter 方法中的實作,會去通路下劃線 _ 開頭的成員變量
新部落格文章位址:@property 和 @synthesize 總結