看別人寫的代碼常常會困惑,因為代碼中會有不同的聲明屬性的寫法,一直不理解區別是什么,于是調研了一下,讓我們看看三種聲明屬性的寫法。
方式一:直接在 @interface 中的大括號中聲明
@interface MyTest : NSObject{
NSString *str;
}
聲明的成員變量是只能在自己類內部使用的,而不能在類的外部使用
方式二:在 @interface 中聲明,然后再在 @property 中聲明
@interface MyTest : NSObject {
NSString *_str;
}
@property (strong, nonatomic) NSString *str;
@synthesize str = _str;
一種過時的聲明變量的方式,Xcode 在早期 @systhesize 沒有自動合成屬性器之前,需要手寫 getter 與 setter 方法,下劃線從風格上表明這是類的內部變量,要是需要直接使用變量則需要使用 get 或者 set 的方式。
在 Xcode 目前有了自動合成屬性器后,編譯器會自動幫我們生成一個以下劃線開頭的的實例變量,所以我們不必去同時聲明屬性與變量。 我們可以直接用 @property 的方式來聲明一個成員屬性,在 .m 文件中使不使用 @systhesize 都無所謂,Xcode 會自動幫你生成 getter 與 setter。
方式三:直接用 @property 聲明
@interface MyTest : NSObject{
@property (strong, nonatomic) NSString *str;
}
可以在類的外部訪問,在類的內部可以通過下劃線+變量名
或者self.變量名
的方式來訪問。