【Objective-C】聲明屬性時三種不同寫法的區別

看別人寫的代碼常常會困惑,因為代碼中會有不同的聲明屬性的寫法,一直不理解區別是什么,于是調研了一下,讓我們看看三種聲明屬性的寫法。

方式一:直接在 @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.變量名的方式來訪問。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容