前言
協議中是什麼意思? 子類繼承了父類,子類會遵守父類遵守的協議嗎?
會遵守nsobject協議,但是只在標頭檔案中宣告,編譯器是不會自動生成例項變數的。需要自己處理getter和setter 方法
ns/cf/cg/ca/ui這些字首分別是什麼含義:
cf cocoafundatwww.cppcns.comion框架
cg coregraphics框架
ca coreanimatigon框架
ui uikit框架
下面話不多說了,來一起看看詳細的介紹吧
1. 區分:類的nsobject與協議的nsobject
ios開發中,蘋果提供iyfokt的一些系統類都屬於nsobject的子類,例如uicolor類的定義如下所示。
uicolor
或者自定義的類,也繼承自nsobject,例如下圖所示。
自定義類的父類
但是,nsobject不僅僅代表基類,還有協議的意思,我們可以稱之根協議,例如下圖所示:
nsobject協議
事實上,從nsobject類的定義可知,nsobject的程式設計客棧類本身就遵循nsobject協議,如下圖所示。
nsobject
2. 協議nsobject的用法
nsobject協議的定義
普通協議的用法
@protocol myprotocol
- (void)foo;
@end
繼承根協議的用法
@protocol myprotocol
- (void)foo;
@end
多繼承的用法
假設你自定義乙個繼承自uitextfield的子類mytextfeild,同時自定義乙個**mytextfeilddelegate的屬性如下:
@protocol mytextfielddelegate
//...
@property (nonatomic, weak) id 程式設計客棧extfeilddelegate> delegate;
這時候會報錯的,因為這個delegate與父類的delegate的協議衝突。乙個解決辦法是利用協議的多繼承:將自定義的協議繼承自父類中的協議。
@protocol mytextfielddelegate
//...
@property (nonatomic, weak) id www.cppcns.comgt; delegate;
3. 拓展
oc裡面的類本來是不支援多繼承的,但有的面試官還是會問到ios裡面如何實現多繼承?除了執行時的辦法,還有一種就是通過協議的多繼承來實現。
總結本文位址:
iOS中畫 UIView的兩種方式
前提 首先有乙個uiview,然後重寫view的 drawrect方法,在這個方法進行繪圖,同時在寫程式時,我們不能直接呼叫drawrect,需要更新繪畫時,我們需要直接呼叫 setneedsdisplay。1.使用 uibezierpath 使用這個就已經知道是在當前view的context上,所...
iOS中建立單例的兩種方式
剛剛開始做ios開發的時候,不知道怎麼建立單例,在網上搜的也大多數都不太全,所以總結了一下建立單例的兩種方式 首先在.h檔案中宣告類方法 1 instancetype sharedutils 然後在.m檔案中實現它,實現的方法有兩種 第一種,在建立乙個物件時先判斷在程式中有沒有建立過這個物件 1 s...
iOS 載入Image的兩種方式
nullable uiimage imagenamed nsstring name nullable uiimage imagewithcontentsoffile nsstring path 這個程式一共載入了三組序列幀動畫 首先我們使用 nullable uiimage imagenamed n...