類別與類擴充套件//類別與繼承
阿新 • • 發佈:2019-01-08
類別
1,在不需要繼承的情況下可以擴充套件類的功能;
2,無法向類中新增新的例項變數,類別沒有位置容納例項變數;
(注意)如果非要在類別中加成員變數,可以使用@dynamic來彌補這種不足;
3,名稱衝突:當類別中的方法與原始類方法名稱衝突,類別具有更高的優先順序。
(補充:在蘋果官方文件中的描述是,當方法名重名的時候,在執行的時候不知道會呼叫哪個方法。實際上,這個應該是有規則可循的。我建了一個工程,給NSString增加了一個類別,裡面重寫了length和substringFromIndex方法。length方法是NSString的方法,substringFromIndex是NSString
類擴充套件(匿名類別)
1,Extension中的方法必須在@implementation中實現,否則編譯會報錯;
2,把程式碼寫在原始類的的.m檔案中;
3,括號裡不需要寫名字;
4,可以再類擴充套件中定義屬性以及私有變數,私有方法;
5,類擴充套件只能針對自定義的類,不能給系統類增加類擴充套件;
繼承與類別
繼承
1,這個是面嚮物件語言都有的一個特性,子類會繼承父類的方法和屬性;
類別做不到,只能使用繼承;
1),新擴充套件的方法與原方法同名,但是還需要使用父類的實現,類別會覆蓋;
2),擴充套件類的屬性,這個類別也做不到;
類別
1,針對系統提供的一些類,例如:NSString,NSArray等類,系統本身不提倡使用繼承去擴充套件方法,因為這些類內部實現方法對繼承有限制;
2,類別的使用,可以提高可維護性,簡化對單個原始檔的管理;
3,不能修改和刪除原始類中的方法;