iOS·NSObject的兩種含義:類與協議
阿新 • • 發佈:2018-12-10
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 長期合作,不做預付,非誠勿擾