問題概述
Review别人代碼, 經常會看到在協定或者分類中有屬性的存在, 這可能會使新手感到很困惑;
因為在原則上
或者
Protocol
Category
中是不可以添加屬性,但是一個iOS開發者一定會看到這樣寫的代碼;
協定和分類型中的屬性到底代表了什麼呢?
Code 樣例
@protocol SQIDemoProtocol <NSObject>
@property (nonatomic, copy) NSString *demoTitleString;
@optional
@property (nonatomic, assign) Class demoCls;
@end
分析
- 完整的屬性包括成員變量和setter、getter兩個方法,在Protocol或者Category中添加屬性,系統無法自動為這些屬性生成成員變量和方法實作,但是方法聲明是有的,是以可以嘗試去調用,但是實際會報錯 -
;unrecognized selector sent to instance
- 是以在Protocol或者Category中添加屬性,實際僅僅添加了方法聲明,這和一般的僅僅在協定添加方法并沒有差別,僅僅看起來不同而已。
- 這麼寫的其實也就代碼簡潔一點,和直接聲明方法是一樣的。