Objective C之Category的使用

2021-09-07 03:29:00 字數 1219 閱讀 8368

category是oc的特有的語法
// 分類的宣告

@inte***ce classname (categoryname)

newmethod; //在類別中新增方法

//不允許在類別中新增變數

@end

// 分類的實現

@implementation classname(categoryname)

newmethod

... ...

@end

classname: 需要給哪個類擴充方法

categoryname: 分類的名稱

newmethod: 擴充的方法

注意:

1.分類是用於給原有類新增方法的, 它只能新增方法, 不能新增屬性(成員變數)

@inte***ce person (nj)

//

2.分類中的@property, 只會生成setter/getter方法的宣告, 不會生成實現以及私有的成員變數

//@property (nonatomic, assign) double height;

驗證方式:在main函式中呼叫property宣告的屬性,並且賦值,發現會奔潰

3.可以在分類中訪問所有類中的.h中的屬性

4.原類中和分類中有相同的方法,會呼叫分類中的方法,也就是說回忽略原類中的方法,所以開發建議,不要在分類寫出原類中同名的方法。

5.如果多個分類中都有和原類中同名的方法,那麼呼叫該方法的時候執行誰由編譯器決定,會執行最後參與編譯的乙個分類。 怎麼看分類誰先編譯呢?

所以不建議在分類宣告實現很多和原類同名的方法。

匿名分類或者匿名擴充套件:沒有名字的分類

延展類別有稱為擴充套件(extendsion),是category的乙個特例。

類擴充套件書寫格式

@inte***ce 類名 ()

@end

對比分類, 就少了乙個分類名稱,因此也有人稱它為」匿名分類」

Objective C語法之Category的使用

無論乙個類設計的如何完美,都不可避免的會遇到沒有 到的需求,那怎麼擴充套件現有的類呢?當然,繼承是個不錯的選擇。但是objective c提供了一種特別的方式來擴充套件類,叫catagory,可以動態的為已經存在的類新增新的行為。這樣可以保證類的原原來的基礎上,較小的改動就可以增加需要的功能。使用c...

Objective C語法之Category的使用

無論乙個類設計的如何完美,都不可避免的會遇到沒有 到的需求,那怎麼擴充套件現有的類呢?當然,繼承是個不錯的選擇。但是objective c提供了一種特別的方式來擴充套件類,叫catagory,可以動態的為已經存在的類新增新的行為。這樣可以保證類的原原來的基礎上,較小的改動就可以增加需要的功能。使用c...

Objective C 之Runtime訊息機制

最近在找工作,objective c中的runtime是經常被問到的乙個問題,幾乎是面試大公司必問的乙個問題。當然還有一些其他問題也幾乎必問,例如 runloop,block,記憶體管理等。其他的問題如果有機會我會在其他文章中介紹。本篇文章主要介紹runtime。runtime簡稱執行時。就是系統在...