@property class

偶然間看到一段代碼


@property (nonatomic, class, readonly, nonnull) NSArray<NSString *> * favoritesPlaylist;

應該叫類變量,類屬性,類成員還是什么的,具體還是上代碼吧,我們先在頭文件 寫好

@interface User : NSObject
@property (class, nonatomic, assign, readonly) NSInteger userCount;
@property (class, nonatomic, copy) NSUUID *identifier;
+ (void)resetIdentifier;
@end

然后m文件這樣寫

@implementation User
static NSUUID *_identifier = nil;
static NSInteger _userCount = 0;

get方法

+ (NSUUID *)identifier {
  if (_identifier == nil) {
    _identifier = [[NSUUID alloc] init];
  }
  return _identifier;
}

+ (void)setIdentifier:(NSUUID *)newIdentifier {
  if (newIdentifier != _identifier) {
    _identifier = [newIdentifier copy];
  }
}

+ (NSInteger)userCount {
  return _userCount;
}

假如需要記錄創建次數

- (instancetype)init
{
  self = [super init];
  if (self) {
    _userCount += 1;
  }
  return self;
}

如果你的類方法是每次都創建一個實例對象,就沒必要寫什么lazyloading

+ (void)resetIdentifier {
  _identifier = [[NSUUID alloc] init];
}

然后我們就可以愉快地使用了

User.userCount;
User.identifier;

例子

for (int i = 0; i < 3; i++) {
    self.user = [[User alloc] init];
    NSLog(@"User count: %ld",(long)User.userCount);
    NSLog(@"Identifier = %@",User.identifier);
}

[User resetIdentifier];    
NSLog(@"Identifier = %@",User.identifier);

Swift的寫法

public class User : NSObject { 
  public class var userCount: Int { get }
  public class var identifier: UUID!   
  public class func resetIdentifier()
}

學習文章:
https://useyourloaf.com/blog/objective-c-class-properties/

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

推薦閱讀更多精彩內容

  • 發現 關注 消息 iOS 第三方庫、插件、知名博客總結 作者大灰狼的小綿羊哥哥關注 2017.06.26 09:4...
    肇東周閱讀 12,250評論 4 61
  • 有一天,豐先生忽然靈感來了,研墨揮毫畫就了一幅題為《賣羊》的漫畫:一個農人牽著兩只湖羊,到羊肉館來賣給老板。畫好后...
    小米萬閱讀 288評論 0 1
  • 楊得意閱讀 166評論 0 0
  • 最近很煩,事情一層一層堆積過來。往往你沒有做完一件事的時候又來另一件事。最后壓得你每件事情都無法做好。 規劃的事情...
    饅頭石頭木頭閱讀 374評論 3 3
  • 詩歌,夢也似的在我的心頭呼喚 讀詩,天馬行空的心都將腳踏實地 抄寫,誰的筆跡潦草,潑灑了一地稚嫩 停筆,詩歌等待后...
    成長路閱讀 213評論 0 0