屬性和實例變量的作用都是聲明一個全局的變量,為了當(dāng)前類中或其他類使用更加方便蠢甲。
iOS 5之前使用GCC編譯方式申明
屬性:
@interface MyViewController {
UIButton *_button;
}
@property (strong, nonatomic) UIButton *button;
@synthesize button;// button = _button;
@end
/* GCC下申明屬性必須要有對應(yīng)的實例變量
@synthesize作用:
1.讓編譯器為你自動生成setter與getter方法
2.可以指定與屬性對應(yīng)的實例變量
使用synthesize制定屬性對應(yīng)的實例變量時,需要使用self->xxx才能訪問對應(yīng)的實例變量
@synthesize button = _button 指定的實例變量肝集,要與屬性對應(yīng)的實例變量相同
否則使用self.button調(diào)用抓谴,編譯器會告訴你,self.button = nil
*/
iOS 5之后怨愤,編譯器從GCC轉(zhuǎn)換為LLVM(low level virtual machine)派敷,使用LLVM(low level virtual machine),此后我們申明屬性不在需要對應(yīng)的實例變量,編譯器會幫我們自動設(shè)置下劃線_button,同時setter與getter方法同樣編譯器處理。
@interface MyViewController
@property (strong, nonatomic) UIButton *button;
@end
/*使用LLVM后篮愉,廢棄之前的寫法*/