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方法能夠監聽類的使用狀況。