iOS---- 分類和擴(kuò)展

分類和擴(kuò)展


?? ? 類別允許您將方法添加到現(xiàn)有的類—甚至添加到您沒(méi)有源的類。Categories是一個(gè)強(qiáng)大的特性,它允許您擴(kuò)展現(xiàn)有類的功能构罗,而不需要子類化。通過(guò)使用類別智玻,您還可以在多個(gè)文件中分發(fā)您自己的類的實(shí)現(xiàn)遂唧。類擴(kuò)展類似,但是允許在主類@interface塊之外的位置為類聲明額外的api


?? ? 向類中添加方法

?? ? 您可以通過(guò)在類名下的接口文件中聲明方法吊奢,并在同名的實(shí)現(xiàn)文件中定義方法盖彭,從而向類中添加方法。類別名稱表示方法是對(duì)在別處聲明的類的添加事甜,而不是新類谬泌。但是,不能使用類別向類中添加其他實(shí)例變量逻谦。

?? ? 類別添加的方法成為類類型的一部分。例如陪蜻,添加到類別中的NSArray類中的方法包含在編譯器期望NSArray實(shí)例在它的指令表中具有的方法中邦马。但是,在子類中添加到NSArray類的方法不包括在NSArray類型中宴卖。(這只對(duì)靜態(tài)類型的對(duì)象很重要滋将,因?yàn)殪o態(tài)類型是編譯器了解對(duì)象類的唯一方法。)

?? ? Category方法可以做類中定義的方法可以做的任何事情症昏。在運(yùn)行時(shí)随闽,沒(méi)有區(qū)別。類添加到類中的方法由類的所有子類繼承肝谭,就像其他方法一樣掘宪。

?? ? 類接口的聲明看起來(lái)非常像類接口聲明——除了類名后面的括號(hào)中列出了類名蛾扇,而沒(méi)有提到超類。除非它的方法不訪問(wèn)類的任何實(shí)例變量魏滚,否則類必須為它擴(kuò)展的類導(dǎo)入接口文件:

?? ? #import "ClassName.h"

?? ? @interface ClassName ( CategoryName )

?? ? //方法聲明

?? ? @end


?? ? 注意镀首,類別不能為類聲明額外的實(shí)例變量;它只包含方法。但是鼠次,類范圍內(nèi)的所有實(shí)例變量也屬于類別范圍更哄。這包括類聲明的所有實(shí)例變量,甚至包括聲明@private的實(shí)例變量腥寇。

?? ? 可以添加到類中的類別數(shù)量沒(méi)有限制成翩,但是每個(gè)類別名稱必須不同,并且每個(gè)類別名稱都應(yīng)該聲明和定義不同的方法集赦役。



?? ? 擴(kuò)展

?? ? 類擴(kuò)展類似于匿名類別捕传,只是它們聲明的方法必須在對(duì)應(yīng)類的主@implementation塊中實(shí)現(xiàn)。使用Clang/LLVM 2.0編譯器扩劝,還可以在類擴(kuò)展中聲明屬性和實(shí)例變量庸论。

?? ? 類擴(kuò)展的一個(gè)常見(jiàn)用途是重新聲明屬性,該屬性公開(kāi)聲明為只讀棒呛,私有聲明為readwrite:


?? ? @interface MyClass : NSObject

?? ? @property (retain, readonly) float value;

?? ? @end


?? ? // 私有擴(kuò)展名聂示,通常隱藏在主實(shí)現(xiàn)文件中。

?? ? @interface MyClass ()

?? ? @property (retain, readwrite) float value;

?? ? @end


?? ? 注意(與類別相反)第二個(gè)@interface塊的括號(hào)中沒(méi)有給出名稱簇秒。

?? ? 通常鱼喉,一個(gè)類有一個(gè)公開(kāi)聲明的API,然后又有一些單獨(dú)聲明的方法趋观,僅供類或類所在的框架使用扛禽。類擴(kuò)展允許您在主類@interface塊之外的位置為類聲明其他必需的方法,如下例所示:

?? ? @interface MyClass : NSObject

?? ? - (float)value;

?? ? @end



?? ? @interface MyClass () {

?? ? float value;

?? ? }

?? ? - (void)setValue:(float)newValue;

?? ? @end


?? ? @implementation MyClass


?? ? - (float)value {

?? ? return value;

?? ? }


?? ? - (void)setValue:(float)newValue {

?? ? value = newValue;

?? ? }


?? ? @end


?? ? 方法的實(shí)現(xiàn)必須出現(xiàn)在類的主@implementation塊中(您不能在類別中實(shí)現(xiàn)它)皱坛。如果不是這樣编曼,編譯器會(huì)發(fā)出警告,說(shuō)明它無(wú)法找到setValue:的方法定義剩辟。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末掐场,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子贩猎,更是在濱河造成了極大的恐慌熊户,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,695評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件吭服,死亡現(xiàn)場(chǎng)離奇詭異嚷堡,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)艇棕,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,569評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門蝌戒,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)串塑,“玉大人,你說(shuō)我怎么就攤上這事瓶颠∧馍蓿” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 168,130評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵粹淋,是天一觀的道長(zhǎng)吸祟。 經(jīng)常有香客問(wèn)我,道長(zhǎng)桃移,這世上最難降的妖魔是什么屋匕? 我笑而不...
    開(kāi)封第一講書人閱讀 59,648評(píng)論 1 297
  • 正文 為了忘掉前任,我火速辦了婚禮借杰,結(jié)果婚禮上过吻,老公的妹妹穿的比我還像新娘。我一直安慰自己蔗衡,他們只是感情好纤虽,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,655評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著绞惦,像睡著了一般逼纸。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上济蝉,一...
    開(kāi)封第一講書人閱讀 52,268評(píng)論 1 309
  • 那天杰刽,我揣著相機(jī)與錄音,去河邊找鬼王滤。 笑死贺嫂,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的雁乡。 我是一名探鬼主播第喳,決...
    沈念sama閱讀 40,835評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼蔗怠!你這毒婦竟也來(lái)了墩弯?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書人閱讀 39,740評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤寞射,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后锌钮,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體桥温,經(jīng)...
    沈念sama閱讀 46,286評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,375評(píng)論 3 340
  • 正文 我和宋清朗相戀三年梁丘,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了侵浸。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片旺韭。...
    茶點(diǎn)故事閱讀 40,505評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖掏觉,靈堂內(nèi)的尸體忽然破棺而出区端,到底是詐尸還是另有隱情,我是刑警寧澤澳腹,帶...
    沈念sama閱讀 36,185評(píng)論 5 350
  • 正文 年R本政府宣布织盼,位于F島的核電站,受9級(jí)特大地震影響酱塔,放射性物質(zhì)發(fā)生泄漏沥邻。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,873評(píng)論 3 333
  • 文/蒙蒙 一羊娃、第九天 我趴在偏房一處隱蔽的房頂上張望唐全。 院中可真熱鬧,春花似錦蕊玷、人聲如沸邮利。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 32,357評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)延届。三九已至,卻和暖如春挺智,著一層夾襖步出監(jiān)牢的瞬間祷愉,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 33,466評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工赦颇, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留二鳄,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,921評(píng)論 3 376
  • 正文 我出身青樓媒怯,卻偏偏與公主長(zhǎng)得像订讼,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子扇苞,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,515評(píng)論 2 359

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

  • 類別與類擴(kuò)展的區(qū)別 ①類別中原則上只能增加方法(能添加屬性的的原因只是通過(guò)runtime解決無(wú)setter/get...
    行走在北方閱讀 272評(píng)論 0 1
  • 分類:對(duì)于原始類中添加更多的方法欺殿,這些添加的方法寫在與原始類不同的.h、.m的文件中鳖敷。也可以給系統(tǒng)自帶的類添加分類...
    像個(gè)被嚇壞的孩子閱讀 582評(píng)論 0 0
  • Swift1> Swift和OC的區(qū)別1.1> Swift沒(méi)有地址/指針的概念1.2> 泛型1.3> 類型嚴(yán)謹(jǐn) 對(duì)...
    cosWriter閱讀 11,111評(píng)論 1 32
  • 1.項(xiàng)目經(jīng)驗(yàn) 2.基礎(chǔ)問(wèn)題 3.指南認(rèn)識(shí) 4.解決思路 ios開(kāi)發(fā)三大塊: 1.Oc基礎(chǔ) 2.CocoaTouch...
    陽(yáng)光的大男孩兒閱讀 4,999評(píng)論 0 13
  • iOS編程規(guī)范0規(guī)范 0.1前言 為??高產(chǎn)品代碼質(zhì)量,指導(dǎo)廣大軟件開(kāi)發(fā)人員編寫出簡(jiǎn)潔脖苏、可維護(hù)、可靠定踱、可 測(cè)試棍潘、高效...
    iOS行者閱讀 4,464評(píng)論 21 35