iOS-class修飾符的解釋及用法
阿新 • • 發佈:2020-08-19
類屬性 (Objective-C Class Properties)
官方解釋
先看下它在Xcode8 release版本中官方給出的解釋:Objective-C now supports class properties, which interoperate with Swift type properties. They are declared as: @property (class) NSString *someStringProperty;. They are never synthesized. (23891898) 簡單來說就是Objective-C現在支援與Swift型別屬性進行互動轉換的類屬性,這些屬性永遠不會synthesized,不會生成set和get方法。
用法
我們新建一個TestCar類,同時有一個屬性 desc 以便於在其他類訪問我們在.h檔案裡面宣告一個屬性1 @interface TestCar : NSObject 2 3 @property (nonatomic, copy, class) NSString *desc; 4 5 @end
當我們宣告一個class屬性的時候,編譯器會發出警告!這也就是前面說的They are never synthesized.
這兩個屬性永遠不會synthesized,因此如果我們不顯式的新增setter和getter方法,XCode就會提示警告資訊使用@dynamic或者是提供setter和getter方法; 注意在getter方法前面使用 + 讓其成為一個類的方法
10.59.43.png1 static NSString * _desc = nil; //這裡我們可以把它宣告為靜態變數 2 3 @implementation TestCar 4 5 + (NSString *)desc{ 6 if (!_desc) { 7 _desc = [[NSString alloc] init]; 8 } 9 return _desc; 10 } 11 12 + (void)setDesc:(NSString *)desc{ 13 _desc = desc; 14 } 15 @end
接下來就可以呼叫了,可以使用類名上的普通點語法訪問類屬性
1 TestCar.desc = @"布加迪限量"; 2 NSLog(@"%@", TestCar.desc);
這裡就可以正常輸出內容了
同時也需要注意的是,由於這是Xcode 8中的LLVM編譯器的一項功能,因此它可以在低於iOS 10的環境下使用。