OC語言類的本質和分類

OC語言類的深刻和分類編程

1、分類測試

(一)分類的基本知識 指針

概念:Category  分類是OC特有的語言,依賴於類。對象

分類的做用:在不改變原來的類內容的基礎上,爲類增長一些方法。blog

添加一個分類:內存

文件結構圖:字符串

 

在分類中添加一個方法it

 

Study方法的實現編譯

 

測試程序:class

 

(二)分類的使用注意

(1)分類只能增長方法(包括類方法和對象方法),不能增長成員變量

(2)在分類方法的實現中能夠訪問原來類中的成員變量;

(3)分類中能夠從新實現原來類中的方法,可是會覆蓋掉原來的方法,致使原來的方法沒法再使用(警告);

(4)方法調用的優先級:分類->原來的類->父類,若包含有多個分類,則最後參與編譯的分類優先;

(5)在不少的狀況下,每每是給系統自帶的類添加分類,如NSObject和NSString,由於有的時候,系統類可能並不能知足咱們的要求。

(6)在大規模的應用中,一般把相應的功能寫成一個分類,能夠有無限個分類,對原有類進行擴充,通常分模塊寫,一個模塊一個分類。

 

(三)分類編程練習

(1)給NSString類增長一個類方法,計算某個字符串對象中阿拉伯數字的個數;

(2)給NSString類增長一個對象方法,計算當前字符串對象中阿拉伯數字的個數;

分類中方法的聲明

 

分類中方法的實現

 

測試程序:

 

 

2、類的深刻研究

(一)類的本質

類自己也是一個對象,是class類型的對象,簡稱「類對象」。

Class類型的定義:

Typedef struct obj class *class;

類名就表明着類對象,每一個類只有一個類對象。

利用class 建立 Person類

利用Person 建立Person類型的對象

Person *p=[[Person alloc] init];

 

獲取內存中的類對象有兩種方法:

(1)class c=[p claa];//指向類的對象的指針調用class方法

(2)Class c1=[Person class];//使用類名調用class方法

注意:c和c1打印出來的地址相同,class c2=[p claa];能夠證實全部的對象共用一個類方法。

(二)類的加載和初始化

 

測試程序:

 

1.當程序啓動時,就會加載項目中全部的類和分類,並且加載後會調用每一個類和分類的+load方法,只會調用一次;

2.當第一次使用某個類時,就會調用當前類的+initialize方法;

3.先加載父類,再加載子類(先調用父類的+load方法,再調用子類的+load方法,最後調用分類的+load方法),先初始化父類,再初始化子類(先調用父類的+initialize方法,再調用子類的+initialize方法)。

4.注意:在初始化的時候,若是在分類中重寫了+initialize方法,則會覆蓋掉父類的。

5.重寫+initialize方法能夠監聽類的使用狀況。

相關文章
相關標籤/搜索