天天看點

iOS - 協定和分類型中的屬性代表了什麼

問題概述

Review别人代碼, 經常會看到在協定或者分類中有屬性的存在, 這可能會使新手感到很困惑;

因為在原則上

Protocol

或者

Category

中是不可以添加屬性,但是一個iOS開發者一定會看到這樣寫的代碼;

協定和分類型中的屬性到底代表了什麼呢?

Code 樣例

@protocol SQIDemoProtocol <NSObject>

@property (nonatomic, copy) NSString *demoTitleString;

@optional
@property (nonatomic, assign) Class demoCls;

@end

           

分析

  1. 完整的屬性包括成員變量和setter、getter兩個方法,在Protocol或者Category中添加屬性,系統無法自動為這些屬性生成成員變量和方法實作,但是方法聲明是有的,是以可以嘗試去調用,但是實際會報錯 -

    unrecognized selector sent to instance

    ;
  2. 是以在Protocol或者Category中添加屬性,實際僅僅添加了方法聲明,這和一般的僅僅在協定添加方法并沒有差別,僅僅看起來不同而已。
  3. 這麼寫的其實也就代碼簡潔一點,和直接聲明方法是一樣的。