類別(category)——通過使用類別,我們能夠動態地為現有的類加入新方法。並且能夠將類定義模組化地分不到多個相關檔案裡。通常僅僅在類別中定義方法。
類別,介面部分的定義,通常該檔案命名為已有"類+類別名.h"
@inte***ce 已有類 (類別名)
//.......方法實現
@end
比如。考慮為nsnumber新增乙個類別,則介面部分**例如以下#import @inte***ce nsnumber (code)
@end
該類別的實現部分例如以下
#import "nsnumber+code.h"
@implementation nsnumber (code)
-(nsnumber *) add:(double) num
-(nsnumber *) mult:(double) num
@end
全部nsnumber類的例項就都會具有add:、multi:方法。從而實現對nsnumber類的動態擴充套件。
我們知道。假設乙個函式在.**件裡無宣告而在.m檔案裡定義它的實現。那麼該方法就是私有方法。僅僅能在本類的檔案裡使用。若我們在類別的介面部分宣告這種方法。那麼我們就能夠實現對該私有方法的訪問。
擴充套件(extension)
擴充套件與類別相似,擴充套件相當於匿名類別。即沒有類別名得類別
類別,介面部分的定義,通常該檔案命名為已有"類_***.h"
@inte***ce 已有類 ()
//.......方法實現
@end
在使用方法上。類別通常都都有單獨的.h和.m檔案。擴充套件則是暫時的對某個類進行擴充套件,類的實現部分同一時候實現類介面部分定義的方法和擴充套件中定義的方法。定義類的擴充套件時,能夠新增額外的例項變數,也可使用@property和@synthesizekeyword,但在定義類的列表時不同意額外定義例項變數。
有類名為vehicle,僅僅有name屬性未定義方法。
對其進行擴充套件
#import "vehicle.h"
@inte***ce vehicle ()
@property(nonatomic, strong) nsstring *color;
-(void) drive:(nsstring *)name;
@end
為原來的vehicle類新增color屬性和drive:方法。因此在vehicle.m實現檔案中面要實現vehicle.h裡宣告的方法及這個drive:方法。
//"vehicle.m"
#import "vehicle_ext.h"
@implementation vehicle
-(void) drive:(nsstring *)name
@end
在實際使用中,通用的做法是省略掉vehicle_ext.**件,而是將當中的內容直接加入在vehicle.m檔案@implementation前部就可以。
協議(protocol)
類別(catgory)能夠實現非正式協議。以nsobject為基礎,為nsoject建立類別。建立類別時指定該類新增的方法,這是實現非正式協議的過程。而oc中對於實現非正式協議的類而言,oc並不強制實現該協議中的全部方法 。
正式協議使用@protocolkeyword定義
@protocol 協議名 《父協議1, 父協議2>
@end
協議是支援多繼承的。在oc2.0標準中新增了@required\@optional兩個keyword,宣告方式是必須是必須實現還是可選的,默覺得@required.
遵守協議的語法例如以下
@inte***ce 類名:父型別 《協議1, 協議2...>
使用協議來定義變數。那麼這些變數僅僅能呼叫該協議中宣告的方法,否則編譯器會提示錯誤。
使用協議來定義變數的兩種語法
nsobject《協議1。協議2..>*變數名;
id《協議1。協議2...> 變數。
協議體現的是一種規範,定義協議的類能夠把協議定義的方法託付(delegate)給實現協議的類,這樣能夠讓類具有更好的通用性,詳細的動作交給協議的實現類來完畢。在大量的應用程式開發中大量依賴託付這個概念。
學習筆記 OC 中類別 擴充套件
對oc類的擴充套件總結如下 共有4個 1 子類 subclass 作用 可以使用類的繼承來增添父類的變數和方法。寫法 在.h檔案中 inte ce student person 2 分類 category 作用 可以增添父類的功能,但不能定義變數。多用於不知道原始碼的情況下,對父類進行擴充套件。寫法...
OC中類目,擴充套件,協議的介紹
類目 類目 categroy 指向已知的類增加新的方法,不會破壞封裝性。1 在類目中定義的方法會成為原始類的一部分,呼叫與其它方法相同。2 在父類中新增類目子類會繼承該類目中的方法,但在子類中新增類目父類無法擁有這些方法。類目 categroy 定義 命名規則 類名 擴張方法 類目不繼承於父類,但介...
OC中類別的小結
類別的作用 在已有的類中新增方法 demo 新建檔案在nsstring類中新增乙個列印自身的方法,直接在main檔案中宣告和實現nsarray列印自身的方法 main.m 類別 created by macro on 14 12 7.import import nsstring selfprint....