OC學習 7 關於分類和擴充套件

2021-07-09 02:25:30 字數 3244 閱讀 4941

*****=文件更新狀態*****

2015-12-21:發布

day07-[2015-12-18]

一、分類和擴充套件

1.分類語法:

@inte***ce 原類名 (分類名)

//擴充套件的方法,屬性(一般較少)宣告

@end

@implementation 原類名 (分類名)

//擴充套件的方法的實現,屬性的getter和setter的實現

@end

2.在使用分類時,如果只匯入原類的標頭檔案是無法訪問分類新增內容的;必須匯入分類的標頭檔案才可以

2.分類的使用

1.給父類增加的分類方法,子類也會繼承下來,但有前提:一定要讓子類能夠「見到」分類標頭檔案,可以在子類的標頭檔案中包含,也可以在使用子類的檔案中包含

2.分割複雜的類,由不同分類給出部分方法的實現

3.替代原類中的同名方法:前提是分類檔案參與編譯,無需嵌入分類的標頭檔案;如果分類的m檔案參與編譯,則原類的方法一定被分類的同名方法覆蓋而無效;如果有多個分類的實現中都有同名方法,則在編譯選項(build phases—>compile sources)中位置靠後的分類方法有效,位置靠前的均被覆蓋而失效;以上均與標頭檔案是否匯入無關

4.訪問「私有」方法:在原類中沒有宣告但有實現的方法,可以在分類中宣告後就可以訪問了;相當於分類中只有宣告,沒有實現,將實現放在原類中完成

5.作為非正式協議:

a.定義乙個nsobject的分類,只有標頭檔案,沒有m檔案,在標頭檔案中定義若干方法(僅有方法宣告)

b.在需要遵循這個非正式協議的類中匯入該分類標頭檔案

c.在遵循這個非正式協議的類的實現部分給出非正式協議中方法的實現

3.分類的應用

1.為nsstring增加乙個方法:-(nsstring*)reverse;

用於將當前字串(ascii)反轉後返回

「abcd」 「dcba」

2.作為非正式協議

一些其它解釋

一、分類category

1.功能:為已有類增加新的方法、屬性(較少用到)

2.語法:@inte***ce 已有類名 (分類名)

//方法、屬性宣告

@end

@implementation 已有類名 (分類名)

//方法實現

//屬性的getter、setter的實現

@end

3.使用:要想使用分類新增方法,必須匯入分類標頭檔案

4.在分類中增加屬性,前提是能夠修改原類**

a.在分類宣告部分和普通屬性一樣先宣告

b.在原類宣告中定義對應的私有成員變數

c.在分類或原類的實現部分給出setter和getter的實現

5.同一操作的2種不同理解

a。通過分類讓原類的「私有」方法變成公有的

b。分類中宣告的方法,不在分類中實現,而是在原類中實現

6.通過分類覆蓋原類方法的實現,相當於重寫:在分類的實現部分中,給出原類已有方法的實現(無需在分類的宣告部分再次宣告該方法),則當物件訪問該方法時,分類的新實現會覆蓋掉原類的實現,不管是否匯入分類標頭檔案;如果不想覆蓋,可以通過修改專案的編譯引數(在 build phase —> complie sources中增減參與編譯的m檔案)解決

7.如果多個分類都重寫了原類的方法,則以編譯順序決定,編譯順序可以手動設定;原類的方法實現不可能覆蓋分類的實現。

8.分類中新增的方法、屬性,原類的子類一樣可以繼承,前提是在使用前(在子類的宣告部分、或main函式前……)匯入分類的標頭檔案;分類重寫的方法無需匯入分類標頭檔案

9.為系統已有類增加方法:

為nsstring增加乙個reverse方法,功能是反轉字串

例如:@「abcde」—>@「edcba」

10.使用分類實現非正式協議

a.定義乙個nsobject的分類,只保留標頭檔案,在其中宣告方法規範

b.在子類的標頭檔案中匯入分類標頭檔案

c.在子類的實現檔案中給出分類中宣告的方法的實現

11.注意非正式協議與正式協議的區別

// **太多--->已經上傳至網盤

//

二、擴充套件extension

1. 只有宣告部分,類似於匿名分類:

@inte***ce 原類名 ()

//屬性和方法

@end

2.但是可以有成員變數、屬性和方法;沒有實現部分,實現要在原類中完成

一些其它解釋

二、擴充套件extension

1.作用:為自定義類(也可以是有源**的類)增加新的成員變數、屬性、方法

2.語法:@inte***ce 已有類名()

//屬性、方法宣告

@end

3.沒有實現檔案,必須在原類中給出方法的實現,一般是在原類的實現檔案(m檔案)中匯入擴充套件檔案,再給出方法實現、重寫屬性的getter/setter等

//  yybook.h

#import

@inte***ce

yybook : nsobject

@property (nonatomic,copy)nsstring* title;

@property (nonatomic,assign)int price;

-(instancetype)initwithtitle:(nsstring*)title price:(int)price;

@end

// yybook.m

#import "yybook_ext.h"

@implementation

yybook

-(instancetype)initwithtitle:(nsstring *)title price:(int)price

return

self;

}-(nsstring *)description

-(void)sell

@end

// yybook_ext.h

#import "yybook.h"

@inte***ce

yybook ()

@property (nonatomic,copy)nsstring* author;

-(void)sell;

@end

// test_book.m

#import "yybook_ext.h"

int main()

**********==eof*****=

31 oc分類和類擴充套件

分類基本概念 書寫category的格式 分類的宣告 inte ce classname categoryname newmethod 在類別中新增方法 不允許在類別中新增變數 end classname 需要給哪個類擴充方法 categoryname 分類的名稱 newmethod 擴充的方法 分...

OC學習筆記之分類

分類 category 的作用 在不修改原有的類的基礎上增加新的方法 乙個龐大的類可以分模組開發 乙個龐大的類可以有多個人來編寫,更有利於團隊合作 使用分類的目的 1.對現有的類進行擴充套件。比如可以擴充套件cocoa touch框架中的類,這些新增加的類跟框架中的類沒有區別。2.作為子類的替代手段...

OC 構造方法和分類

建立乙個可用的物件 person p person new new方法實際上是分為兩步來建立乙個物件 1 使用 alloc方法來分配儲存空間 返回分配的物件 2 使用 init方法來對物件進行初始化。可以把new方法拆開如下 1.呼叫類方法 alloc分配儲存空間,返回未經初始化的物件 person...