GeekBand-OC中的類(lèi)別和協(xié)議

類(lèi)別(category)——通過(guò)使用類(lèi)別频轿,我們可以動(dòng)態(tài)地為現(xiàn)有的類(lèi)添加新方法逆日,而且可以將類(lèi)定義模塊化地分不到多個(gè)相關(guān)文件中。通常只在類(lèi)別中定義方法颖侄。

類(lèi)別鸟雏,接口部分的定義,通常該文件命名為已有"類(lèi)+類(lèi)別名.h"

 @interface 已有類(lèi) (類(lèi)別名)
    //.......方法實(shí)現(xiàn)
 @end

例如享郊,考慮為NSNumber增加一個(gè)類(lèi)別,則接口部分代碼如下

 #import <Foundation/Foundation.h>
@interface NSNumber (code)
 -(NSNumber *) add:(double) num;
 -(NSNumber *) mult:(double) num
@end

該類(lèi)別的實(shí)現(xiàn)部分如下

 #import "NSNumber+code.h"

 @implementation NSNumber (code)
 -(NSNumber *) add:(double) num
{
  return [NSNumber numberWithDouble:([self doubleValue] +num)];
}
-(NSNumber *) mult:(double) num
{
  return [NSNumber numberWithDouble:([self doubleValue]     +num)];
}
@end

所有NSNumber類(lèi)的實(shí)例就都會(huì)具有add:孝鹊、multi:方法炊琉,從而實(shí)現(xiàn)對(duì)NSNumber類(lèi)的動(dòng)態(tài)擴(kuò)展。

QQ20160308-1@2x.png

PS.如果一個(gè)函數(shù)在.h文件中無(wú)聲明而在.m文件中定義它的實(shí)現(xiàn)又活,那么該方法就是私有方法苔咪,只能在本類(lèi)的文件中使用。 若我們?cè)陬?lèi)別的借口部分聲明這個(gè)方法柳骄,那么我們就可以實(shí)現(xiàn)對(duì)該私有方法的訪問(wèn)团赏。


擴(kuò)展(extension)

擴(kuò)展與類(lèi)別相似,擴(kuò)展相當(dāng)于匿名類(lèi)別耐薯,即沒(méi)有類(lèi)別名得類(lèi)別

在用法上舔清,類(lèi)別通常都都有單獨(dú)的.h和.m文件。擴(kuò)展則是臨時(shí)的對(duì)某個(gè)類(lèi)進(jìn)行擴(kuò)展曲初,類(lèi)的實(shí)現(xiàn)部分同時(shí)實(shí)現(xiàn)類(lèi)接口部分定義的方法和擴(kuò)展中定義的方法体谒。定義類(lèi)的擴(kuò)展時(shí),可以增加額外的實(shí)例變量臼婆,也可使用@property和@synthesize關(guān)鍵字抒痒,但在定義類(lèi)的額外列表時(shí)不允許額外定義實(shí)例變量。

有類(lèi)名為Vehicle颁褂,只有name屬性沒(méi)有定義方法故响。對(duì)其進(jìn)行擴(kuò)展。為原來(lái)的Vehicle類(lèi)增加color屬性和drive:方法颁独,因此在Vehicle.m實(shí)現(xiàn)文件里面要實(shí)現(xiàn)Vehicle.h里聲明的方法及這個(gè)drive:方法被去。

//"Vehicle.m"
#import "Vehicle.h"
@interface Vehicle ()
@property(nonatomic, strong) NSString *color;
-(void) drive:(NSString *)name;
@end
@implementation Vehicle
-(void) drive:(NSString *)name
{
    NSLog(@"交通工具名稱(chēng)%@,顏色屬性%@",_name,_color);
}
@end

QQ20160308-2@2x.png

協(xié)議(protocol)

以NSObject為基礎(chǔ),為NSOject創(chuàng)建類(lèi)別奖唯,創(chuàng)建類(lèi)別時(shí)指定該類(lèi)新增的方法惨缆,既可以實(shí)現(xiàn)非正式協(xié)議。而OC中對(duì)于實(shí)現(xiàn)非正式協(xié)議的類(lèi)而言丰捷,OC并不強(qiáng)制實(shí)現(xiàn)該協(xié)議中的所有方法 坯墨。

正式協(xié)議使用@protocol關(guān)鍵字定義

    @protocol 協(xié)議名 <父協(xié)議1, 父協(xié)議2>
    {
          //.....方法聲明
    }
    @end

協(xié)議是支持多繼承的病往。在OC2.0標(biāo)準(zhǔn)中新增了@required@optional兩個(gè)關(guān)鍵字捣染,聲明方式是必須是必須實(shí)現(xiàn)還是可選的,默認(rèn)為@required.
遵守協(xié)議的語(yǔ)法如下:

 @interface 類(lèi)名:父類(lèi)型 <協(xié)議1停巷, 協(xié)議2...>

使用協(xié)議來(lái)定義變量耍攘,那么這些變量只能調(diào)用該協(xié)議中聲明的方法榕栏,否則編譯器會(huì)提示錯(cuò)誤。
協(xié)議體現(xiàn)的是一種規(guī)范蕾各,定義協(xié)議的類(lèi)可以把協(xié)議定義的方法委托(delegate)給實(shí)現(xiàn)協(xié)議的類(lèi)扒磁,這樣可以讓類(lèi)具有更好的通用性,具體的動(dòng)作交給協(xié)議的實(shí)現(xiàn)類(lèi)來(lái)完成式曲。在大量的應(yīng)用程序開(kāi)發(fā)中大量依賴委托這個(gè)概念妨托。

QQ20160308-0@2x.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市吝羞,隨后出現(xiàn)的幾起案子兰伤,更是在濱河造成了極大的恐慌,老刑警劉巖钧排,帶你破解...
    沈念sama閱讀 218,204評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件敦腔,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡恨溜,警方通過(guò)查閱死者的電腦和手機(jī)符衔,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)筒捺,“玉大人柏腻,你說(shuō)我怎么就攤上這事∠悼裕” “怎么了五嫂?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,548評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)肯尺。 經(jīng)常有香客問(wèn)我沃缘,道長(zhǎng),這世上最難降的妖魔是什么则吟? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,657評(píng)論 1 293
  • 正文 為了忘掉前任槐臀,我火速辦了婚禮,結(jié)果婚禮上氓仲,老公的妹妹穿的比我還像新娘水慨。我一直安慰自己,他們只是感情好敬扛,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,689評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布晰洒。 她就那樣靜靜地躺著,像睡著了一般啥箭。 火紅的嫁衣襯著肌膚如雪谍珊。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,554評(píng)論 1 305
  • 那天急侥,我揣著相機(jī)與錄音砌滞,去河邊找鬼侮邀。 笑死,一個(gè)胖子當(dāng)著我的面吹牛贝润,可吹牛的內(nèi)容都是我干的绊茧。 我是一名探鬼主播,決...
    沈念sama閱讀 40,302評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼题暖,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼按傅!你這毒婦竟也來(lái)了捉超?” 一聲冷哼從身側(cè)響起胧卤,我...
    開(kāi)封第一講書(shū)人閱讀 39,216評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎拼岳,沒(méi)想到半個(gè)月后枝誊,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,661評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡惜纸,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,851評(píng)論 3 336
  • 正文 我和宋清朗相戀三年叶撒,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片耐版。...
    茶點(diǎn)故事閱讀 39,977評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡祠够,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出粪牲,到底是詐尸還是另有隱情古瓤,我是刑警寧澤,帶...
    沈念sama閱讀 35,697評(píng)論 5 347
  • 正文 年R本政府宣布腺阳,位于F島的核電站落君,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏亭引。R本人自食惡果不足惜绎速,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,306評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望焙蚓。 院中可真熱鬧纹冤,春花似錦、人聲如沸购公。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,898評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)君丁。三九已至枫夺,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間绘闷,已是汗流浹背橡庞。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,019評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工较坛, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人扒最。 一個(gè)月前我還...
    沈念sama閱讀 48,138評(píng)論 3 370
  • 正文 我出身青樓丑勤,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親吧趣。 傳聞我的和親對(duì)象是個(gè)殘疾皇子法竞,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,927評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容