類的擴充套件, 延展

2021-07-09 05:01:20 字數 1349 閱讀 3341

//類的擴充套件: 為類擴充套件例項變數和方法

//前提: 現有乙個類

//1.已經類(比如:girl)的擴充套件

//a,直接修改, 可以擴充套件例項變數和方法

延展, 擴充套件"私有"例項變數和"私有"方法(只在類內部使用),方法的實現要寫在原有檔案的*.m中

//注: 只有是能在@inte***ce 中寫的內容嗎都可以在extension中實現, 比如: 遵守的協議, 寫屬性

這樣話, 在girl自己建立的類girl中, 就只需要在.m中將extension中的方法寫到裡面就可以了,因為寫在.m檔案中, 所有外界是看不到的(因為一般都會寫在.h中, 介面部分, 使用者可以看到)而這方法私有的. 只有在類的內部才能使用. 這裡是@inte***ce girl () ;

#import "girl.h"

@inte***ce girl () //注意: 寫在下一行, 這種表示協議

//@property (nonatomic, copy)nsstring *color;

- (void)sayhi;

@end

/*標頭檔案相當於直接引進入, 推薦使用() 注意:延展一般寫在#import的 下下行, 不然不會提示!

//2.未知類(比如:nsstring)的擴充套件

//a.繼承, 可以擴充套件例項變數和方法

//缺點: 擴充套件的例項變數和方法只有子類才具備, 父類不能使用

分類, 類目, 只能擴充方法, 不能擴充例項變數

//為nsstring新增sayhi (選擇oc-file, 選擇,類名, 還有協議, 工程名, 並且只能擴充方法, 不能擴充例項變數) 會在檔案中建立了nsstring + sayhi 的檔案. 再宣告中出現@inte***nce nsstring (sayhi)

[nsstring sayhi];

//注: category中擴充的方法如果和原來類中的方法相同, category中的方法具有更高的優先順序

nsstring *string = @"kris";

nslog(@"%@",[nsstring getfirstletter:string]);

nslog(@"%@", [string getfirstletter1]);

nsstring *string1 = @"abcdsdfwdfdsggd";

nslog(@"%@",[string1 middleletter]);

nslog(@"%@", [nsstring middleletter1:string1]);

//還有協議:protocal,

category(類目), extension(延展),protocal(協議),三者都只在oc-file 建立的.

延展操作符 擴充套件運算子

擴充套件運算子 spread 是三個點 它好比 rest 引數的逆運算,將乙個陣列轉為用逗號分隔的引數序列。他的應用 1 複製陣列 const a 1,2,3 複製 cosnt b a 2 合併陣列 cosnt arr1 1,2 const arr2 4,5,6 合併 arr1,arr2 注意這種方...

OC 11 1類目與延展

inte ce tool nsobject property nonatomic,strong nsstring property1 void function1 原始類的方法 end 既然建立了類目,我們就在tool.h接著上面繼續往下,咱們來用一下 pragma mark 類目 在類目中為原類新...

OC 08 類目延展協議

類目的特點 若類目中重寫了類現有的方法,則優先呼叫類目方法 類目無法新增成員變數,而可以新增屬性 類目中新增屬性需要使用 dynamic動態合成,手動實現setter和getter方 法,並且改類已經存在對應的成員變數 為什麼我們要使用類目?某些情況下,我們需要對一些現有的類新增一些方法 通常做法是...