類別與類擴展//類別與繼承


類別

1,在不需要繼承的情況下可以擴展類的功能;

2,無法向類中添加新的實例變量,類別沒有位置容納實例變量;

(注意)如果非要在類別中加成員變量,可以使用@dynamic來彌補這種不足;

3,名稱沖突:當類別中的方法與原始類方法名稱沖突,類別具有更高的優先級。

(補充:在蘋果官方文檔中的描述是,當方法名重名的時候,在運行的時候不知道會調用哪個方法。實際上,這個應該是有規則可循的。我建了一個工程,給NSString增加了一個類別,里面重寫了lengthsubstringFromIndex方法。length方法是NSString的方法,substringFromIndexNSString的一個類別里的方法。當我調用者兩個方法時,發現調用length的時候返回的是系統的那個調用,而不是我自己實現。而當調用substringFromIndex時,調用的則是我實現的方法。於是我推斷當系統類中的方法名與自己定義的類別里的方法重名時,會調用系統的方法名,而當自定義類別中的方法名與系統類別中的方法重名時,會使用自定義類別中的方法的實現。為了驗證這一推斷,我又繼續增加了NSArray的類別來進行測試,測試結果正如我推斷的一樣。即使是這樣,我們也不能確定這個結論就是正確的。)


類擴展(匿名類別)

1,Extension中的方法必須在@implementation中實現,否則編譯會報錯;

2,把代碼寫在原始類的的.m文件中;

3,括號里不需要寫名字;

4,可以再類擴展中定義屬性以及私有變量,私有方法;

5,類擴展只能針對自定義的類,不能給系統類增加類擴展;

 

繼承與類別

 

繼承

1,這個是面向對象語言都有的一個特性,子類會繼承父類的方法和屬性;

類別做不到,只能使用繼承;

1),新擴展的方法與原方法同名,但是還需要使用父類的實現,類別會覆蓋;

2),擴展類的屬性,這個類別也做不到;

 

類別

1,針對系統提供的一些類,例如:NSString,NSArray等類,系統本身不提倡使用繼承去擴展方法,因為這些類內部實現方法對繼承有限制;

2,類別的使用,可以提高可維護性,簡化對單個源文件的管理;

3,不能修改和刪除原始類中的方法;


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com