Category相速、Protocol、Extension文件區(qū)別

在新創(chuàng)建文件過程中

commit + n快捷鍵.png

在File Type選項中有著Empty File、Category、Protocol、Extension四種類型的文件


四種類型.png

首先簡單介紹一下創(chuàng)建出來文件
①創(chuàng)建Empty File文件,Class項不用填寫,只用填寫文件名,最終創(chuàng)建出來的文件: 文件名.m
該文件為空文件,內(nèi)部只有 (一個文件)

#import <Foundation/Foundation.h>

②創(chuàng)建Category(分類)文件,以文件名Test, Class為UIViewController為例,創(chuàng)建了兩個文件
有.h和.m文件
UIViewController+Test.h

#import <UIKit/UIKit.h>

@interface UIViewController (Test)

@end

UIViewController+Test.m

#import "UIViewController+Test.h"

@implementation UIViewController (Test)

@end

③創(chuàng)建Protocol(協(xié)議)文件,以文件名Test為例,Class項不用填寫.創(chuàng)建了一個文件.
Test.h

#import <Foundation/Foundation.h>

@protocol Test <NSObject>

@end

④創(chuàng)建Extension(延展/擴展)文件,,以文件名Test, Class為UIViewController為例,創(chuàng)建了一個文件 UIViewController_Test.h

#import <UIKit/UIKit.h>

@interface UIViewController ()

@end

接下來開始介紹Category(分類/類目)、Protocol(協(xié)議)蚜厉、Extension(擴展/延展)三者:

Category(分類/類目):
利用Objective-C的動態(tài)運行時分配機制恬汁,Category提供了一種比繼承更為簡潔的方法來對class進(jìn)行擴展,無需創(chuàng)建對象類的子類就能為現(xiàn)有的類添加新方法,可以為任何已經(jīng)存在的class添加方法顽铸,包括那些沒有源代碼的類。(只能新添加方法)

注意:
(1)無法向類中添加新的實例變量,類別沒有位置容納實例變量牺六。
(2)名稱沖突艘蹋,即當(dāng)類別中的方法與原始類方法名稱沖突時冯键,類別具有更高的優(yōu)先級枉昏。類別方法將完全取代初始方法從而無法再使用初始方法。

實際開發(fā)使用:
UINavigationBar+CustomHeight 在iOS 7和iOS 8上自定義UINavigationBar高度午衰。
https://gist.github.com/maciekish/c2c903d9b7e7b583b4b2
UILabel+Attributed attributedLabel使用Core Text框架來設(shè)置行距和添加細(xì)節(jié)崖技。
https://github.com/self-creative/attributedLabel
還有其他Objective-C相關(guān)Category的收集
http://www.cocoachina.com/ios/20140926/9764.html

Protocol(協(xié)議):
協(xié)議冀瓦。類似C++中的虛類,只負(fù)責(zé)聲明拓提,不負(fù)責(zé)實現(xiàn)萨驶。其他子類繼承該虛類,需要實現(xiàn)虛類中的方法。

特點:協(xié)議多用在許多類同時使用相同的方法而且這些代碼重復(fù)性很大的情況下,它會把這些重復(fù)的代碼提煉出來放在一個協(xié)議里箩帚,供大家使用紧帕。它確實有些類似于java中的接口和C++中的純虛函數(shù)的抽象類,它提供協(xié)議的規(guī)則,使用者只有遵從協(xié)議的規(guī)則才能使用它所提供的方法恢准。當(dāng)然這些方法在協(xié)議中它只是幫助進(jìn)行了聲明馁筐,并沒有任何的實現(xiàn)赦抖。當(dāng)使用者遵從這個協(xié)議并使用它的方法時,如果在類聲明文件中方法都是默認(rèn)的或者是@required時要尔,那么在類實現(xiàn)文件中必須全部地實現(xiàn)這些方法救欧。如果是@optional標(biāo)記的,使用者可以選擇性的實現(xiàn)椎镣,視情況而定诈火。

過程:它只有.h聲明文件,它既可以作為一個單獨的文件進(jìn)行聲明所提供的方法状答,也可以直接放在類聲明文件中進(jìn)行聲明冷守,一般采用后者進(jìn)行聲明。它的方法聲明時有默認(rèn)惊科、@required拍摇、@optional三種情況。當(dāng)使用前面兩種時馆截,在類實現(xiàn)文件中必須全部地實現(xiàn)這些方法充活。如果是@optional標(biāo)記的,使用者可以選擇性的實現(xiàn)蜡娶,視情況而定混卵。當(dāng)它的方法沒有@optional時,那么它就類似于接口中的abstract整個類是抽象的,是必須全部實現(xiàn)所有的方法的。

格式:

@protocol  協(xié)議名:<父類協(xié)議名>   =======>放在類的.h文件中或者在自己的單獨創(chuàng)建的.h文件中

                  {

method1窖张;//默認(rèn)的幕随,類實現(xiàn)文件中必須要實現(xiàn)這個方法

@required

method2; //需求的,類實現(xiàn)文件中必須要實現(xiàn)這個方法

@optional

method3;//可選擇的宿接,使用者可以選擇性的實現(xiàn)

  } 

 @end

實際開發(fā)使用:利用協(xié)議可以實現(xiàn)代理模式赘淮。也就是給類尋找委托人,幫助類完成一些功能辕录,而類不用自己親自去做。這種代理模式使得代碼的靈活性提高,也降低了耦合性梢卸,不必向繼承那樣走诞,因為父類和子類的耦合性太強,父類一變化,子類就也得跟著變化蛤高,太過麻煩蚣旱。協(xié)議要求,不管使用者是誰戴陡,阿貓阿狗都行姻锁,只要遵從規(guī)則,就可以用協(xié)議的方法替類去完成委托的任務(wù)猜欺。類似于老板與秘書的關(guān)系:老板出差時,秘書給老板訂票拷窜、訂房开皿;老板開會時,秘書就負(fù)責(zé)通知所有要開會的人篮昧。赋荆。。

Extension(擴展/延展):
匿名的Category(特殊的)懊昨。類有時需要一些只為自己所見窄潭,所用的私有方法這種私有方法可以通過延展的方式來聲明,定義的方法在類本身的@implementation代碼區(qū)域中進(jìn)行實現(xiàn)酵颁。
與Category不同的地方:可增加私有屬性嫉你,聲明的方法必須實現(xiàn)。作用:將方法變?yōu)轭惖乃接蟹椒ā?它只有.h文件 (可以添加方法和實例變量)

注意:在類別(Category)中只能添加方法躏惋,方法都是公有的幽污;在類擴展(Extension)中,既可以添加方法,也可以添加實例變量,但是添加的內(nèi)容都是類私有的,只能在類的內(nèi)部訪問簿姨。


既然寫到這里,再把繼承也寫一下吧

繼承:
①特點: 繼承多用于一般父類中的方法功能比較齊全距误,子類從父類繼承過來使用,可以省略很多重復(fù)的代碼,不僅簡化了代碼扁位,而且也提高了代碼的復(fù)用性准潭。

②過程: 當(dāng)子類需要的方法和屬性在父類中找不到時,子類可以添加自己必要的方法和屬性,目的是對功能進(jìn)行擴充域仇;當(dāng)父類中有子類需要的方法刑然,但是方法中內(nèi)容并不能完成子類的需要時,子類可以重新實現(xiàn)這個同名的函數(shù),它會覆蓋父類的同名函數(shù)來實現(xiàn)子類的需要的內(nèi)容。

③格式:

@interface 類名 : 父類名    =====> .h聲明文件 
  { 
屬性property;
  }
 //@property(參數(shù)1,參數(shù)2) 類型名 變量名殉簸;
  方法method闰集;
 @end
                 
  @implementation 類名      ======>.m實現(xiàn)文件
  //@synthesize 變量名
  {
     實現(xiàn)方法method沽讹;
  }
  @end

④說明:
@property(參數(shù)1,參數(shù)2) 武鲁、@synthesize 變量名
讀寫屬性: (readwrite/readonly)

setter語意:(assign/retain/copy)

原子性: (atomicity/nonatomic)

各參數(shù)意義如下:

readwrite: 產(chǎn)生setter\getter方法

readonly: 只產(chǎn)生簡單的getter,沒有setter爽雄。

assign: 默認(rèn)類型,setter方法直接賦值,而不進(jìn)行retain操作

retain: setter方法對參數(shù)進(jìn)行release舊值沐鼠,再retain新值挚瘟。

copy: setter方法進(jìn)行Copy操作,與retain一樣

nonatomic: 禁止多線程饲梭,變量保護(hù)乘盖,提高性能

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市憔涉,隨后出現(xiàn)的幾起案子订框,更是在濱河造成了極大的恐慌,老刑警劉巖兜叨,帶你破解...
    沈念sama閱讀 219,366評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件穿扳,死亡現(xiàn)場離奇詭異,居然都是意外死亡国旷,警方通過查閱死者的電腦和手機矛物,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,521評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來跪但,“玉大人履羞,你說我怎么就攤上這事÷啪茫” “怎么了忆首?”我有些...
    開封第一講書人閱讀 165,689評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長涂身。 經(jīng)常有香客問我雄卷,道長,這世上最難降的妖魔是什么蛤售? 我笑而不...
    開封第一講書人閱讀 58,925評論 1 295
  • 正文 為了忘掉前任丁鹉,我火速辦了婚禮,結(jié)果婚禮上悴能,老公的妹妹穿的比我還像新娘揣钦。我一直安慰自己,他們只是感情好漠酿,可當(dāng)我...
    茶點故事閱讀 67,942評論 6 392
  • 文/花漫 我一把揭開白布冯凹。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪宇姚。 梳的紋絲不亂的頭發(fā)上匈庭,一...
    開封第一講書人閱讀 51,727評論 1 305
  • 那天,我揣著相機與錄音浑劳,去河邊找鬼阱持。 笑死,一個胖子當(dāng)著我的面吹牛魔熏,可吹牛的內(nèi)容都是我干的衷咽。 我是一名探鬼主播,決...
    沈念sama閱讀 40,447評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼蒜绽,長吁一口氣:“原來是場噩夢啊……” “哼镶骗!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起躲雅,我...
    開封第一講書人閱讀 39,349評論 0 276
  • 序言:老撾萬榮一對情侶失蹤鼎姊,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后相赁,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體此蜈,經(jīng)...
    沈念sama閱讀 45,820評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,990評論 3 337
  • 正文 我和宋清朗相戀三年噪生,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片东囚。...
    茶點故事閱讀 40,127評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡跺嗽,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出页藻,到底是詐尸還是另有隱情桨嫁,我是刑警寧澤,帶...
    沈念sama閱讀 35,812評論 5 346
  • 正文 年R本政府宣布份帐,位于F島的核電站璃吧,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏废境。R本人自食惡果不足惜畜挨,卻給世界環(huán)境...
    茶點故事閱讀 41,471評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望噩凹。 院中可真熱鬧巴元,春花似錦、人聲如沸驮宴。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,017評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽堵泽。三九已至修己,卻和暖如春恢总,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背睬愤。 一陣腳步聲響...
    開封第一講書人閱讀 33,142評論 1 272
  • 我被黑心中介騙來泰國打工片仿, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人戴涝。 一個月前我還...
    沈念sama閱讀 48,388評論 3 373
  • 正文 我出身青樓滋戳,卻偏偏與公主長得像,于是被迫代替她去往敵國和親啥刻。 傳聞我的和親對象是個殘疾皇子奸鸯,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,066評論 2 355

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

  • *面試心聲:其實這些題本人都沒怎么背,但是在上海 兩周半 面了大約10家 收到差不多3個offer,總結(jié)起來就是把...
    Dove_iOS閱讀 27,150評論 30 470
  • (一)Category category是Objective-C 2.0之后添加的語言特性,別人口中的分類可帽、類別其...
    小李龍彪閱讀 2,961評論 0 10
  • 1.項目經(jīng)驗 2.基礎(chǔ)問題 3.指南認(rèn)識 4.解決思路 ios開發(fā)三大塊: 1.Oc基礎(chǔ) 2.CocoaTouch...
    陽光的大男孩兒閱讀 4,988評論 0 13
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理娄涩,服務(wù)發(fā)現(xiàn),斷路器映跟,智...
    卡卡羅2017閱讀 134,667評論 18 139
  • 隨著一線城市房價的突飛猛進(jìn)蓄拣,租金價格也是飛漲。原來希望“整租“的年輕人不得不低頭看看荷包努隙,尋思著找人 ”合租“球恤。 ...
    良有方閱讀 500評論 0 1