1. 程式人生 > >iOS·NSObject的兩種含義:類與協議

iOS·NSObject的兩種含義:類與協議

1. 區分:類的NSObject與協議的NSObject

iOS開發中,蘋果提供的一些系統類都屬於NSObject的子類,例如UIColor類的定義如下所示。

UIColor

或者自定義的類,也繼承自NSObject,例如下圖所示。

自定義類的父類

但是,NSObject不僅僅代表基類,還有協議的意思,我們可以稱之根協議,例如下圖所示:

NSObject協議

事實上,從NSObject類的定義可知,NSObject的類本身就遵循NSObject協議,如下圖所示。

NSObject

2. 協議NSObject的用法

  • NSObject協議的定義

image.png

  • 普通協議的用法

@protocol MyProtocol- (void)foo; @end
  • 繼承根協議的用法

@protocol MyProtocol - (void)foo; @end
  • 多繼承的用法

假設你自定義一個繼承自UITextField的子類MyTextFeild,同時自定義一個代理MyTextFeildDelegate的屬性如下:

@protocol MyTextFieldDelegate //[email protected] (nonatomic, weak) id  delegate;

這時候會報錯的,因為這個delegate與父類的delegate的協議衝突。一個解決辦法是利用協議的多繼承:將自定義的協議繼承自父類中的協議。

@protocol MyTextFieldDelegate //[email protected] (nonatomic, weak) id  delegate;

3. 拓展

OC裡面的類本來是不支援多繼承的,但有的面試官還是會問到iOS裡面如何實現多繼承?除了執行時的辦法,還有一種就是通過協議的多繼承來實現。

作者:陳滿iOS  ios-Swift/Object C開發上架稽核交流群 869685378 歡迎各位大牛來分享交流 IOS,馬甲包,低要求,內容開發沒有限制,報酬豐厚,實力誠信 Q:782675105 長期合作,不做預付,非誠勿擾