OC語言類的本質和分類


 

OC語言類的深入和分類

一、分類

(一)分類的基本知識 

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

分類的作用:在不改變原來的類內容的基礎上,為類增加一些方法。

添加一個分類:

文件結構圖:

 

在分類中添加一個方法

 

Study方法的實現

 

測試程序:

 

(二)分類的使用注意

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

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

(3)分類中可以重新實現原來類中的方法,但是會覆蓋掉原來的方法,導致原來的方法無法再使用(警告);

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

(5)在很多的情況下,往往是給系統自帶的類添加分類,如NSObjectNSString,因為有的時候,系統類可能並不能滿足我們的要求。

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

 

(三)分類編程練習

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

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

分類中方法的聲明

 

分類中方法的實現

 

測試程序:

 

 

二、類的深入研究

(一)類的本質

類本身也是一個對象,是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方法

注意:cc1打印出來的地址相同,class c2=[p claa];可以證明所有的對象共用一個類方法。

(二)類的加載和初始化

 

測試程序:

 

1.當程序啟動時,就會加載項目中所有的類和分類,而且加載后會調用每個類和分類的+load方法,只會調用一次;

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

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

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

5.重寫+initialize方法可以監聽類的使用情況。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM