iOS中NSObject的兩種含義 類和協議詳解

2022-09-21 09:03:11 字數 1322 閱讀 8492

前言

協議中是什麼意思? 子類繼承了父類,子類會遵守父類遵守的協議嗎?

會遵守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...