<NSObject>協(xié)議

<NSObject>協(xié)議

寫在前頭,上一篇我們介紹了NSObject基類中定義的函數(shù)钉稍,但是我們發(fā)現(xiàn)在Cocoa有兩個NSObject涤躲,一個是類,一個是協(xié)議贡未。為什么有兩個种樱?用來做什么?
我們先來看看NSObject協(xié)議中定義了那些方法俊卤,然后再詳細(xì)介紹一下兩者有何不同嫩挤。

<NSObject>協(xié)議方法

- (BOOL)isEqual:(id)object

功能:比較兩個對象的地址是否相等
</br></br>

@property (readonly) NUInterger hash

功能: 聲明獲取hash值得get方法
</br></br>

@property (readonly) Class superclass

功能: 聲明返回父類對象的get方法
</br></br>

- (Class)class

功能: 聲明獲取類本身對象的方法
</br></br>

- (instancetype)self

功能:返回自身實例
</br></br>

- (id)performSelector:(SEL)aSelector

功能: 調(diào)用aSelector方法
</br></br>

- (id)performSelector:(SEL)aSelector withObject:(id)object

功能:調(diào)用aSelector 傳入一個參數(shù)
</br></br>

- (id)performSelector:(SEL)aSelector withObject:(id)object1 withObject:(id)object2

功能: 調(diào)用aSelector 傳入兩個參數(shù)
</br></br>

- (BOOL)isProxy

功能:判斷一個實例是否繼承自NSProxy,如果返回YES就是繼承自NSProxy消恍,反之返回NO
</br></br>

- (BOOL)isKindOfClass:(Class)aClass

功能:判斷對象是否屬于aClass及其子類
</br></br>

- (BOOL)isMemberOfClass:(Class)aClass

功能: 判斷對象是否屬于aClass類
</br></br>

- (BOOL)respondsToSelector:(SEL)aSelector

功能: 判斷對象是否能響應(yīng)aSelector方法
</br></br>

- (BOOL)conformsToProtocol:(Protocol *)aProtocol

功能: 判斷某個對象是否遵守了aProtocol協(xié)議
</br></br>


內(nèi)存管理相關(guān) ARC廢棄 不多說

- (instancetype)retain OBJC_ARC_UNAVAILABLE;

- (oneway void)release OBJC_ARC_UNAVAILABLE;

- (instancetype)autorelease OBJC_ARC_UNAVAILABLE;

- (NSUInteger)retainCount OBJC_ARC_UNAVAILABLE;

- (struct _NSZone*) zone OBJC_ARC_UNAVAILABLE;

@property (readonly, copy) NSString *description

功能: 生成desctiption的get方法
</br></br>

@property (readonly, copy) NSString *debugDescription;

功能: debugDescription的get方法
</br>


那為什么需要一個類岂昭,一個協(xié)議呢
NSObject的類和協(xié)議在Objective-C中存在于不同的命名空間。你可以同時擁有相同的類和協(xié)議狠怨,但是他們在編程語言上是不相關(guān)聯(lián)的约啊。

根類 NSObject

NSObject類屬于根類。在繼承的層級結(jié)構(gòu)中處于最高級佣赖。但是Objective-C中還有其他根類恰矩。比如NSProxy類。NSObject協(xié)議定義了一套所有根類可以實現(xiàn)的基礎(chǔ)方法憎蛤。NSObjec類也是遵循NSObject協(xié)議的枢里,也就是說NSObject類也實現(xiàn)了NSObject協(xié)議所聲明的方法。

@interface NSObject<NSObject>

NSProxy同樣也遵循NSObjec協(xié)議

@interface NSProxy<NSObject>

在這里我們介紹一下NSProxy類,順便說一下NSObject協(xié)議
</br>
為什么有NSProxy類呢栏豺,顧名思義彬碱,NSProxy類作為是一個代理類的根類。很多情況下你持有一個類奥洼,但是可以不實現(xiàn)你不需要的方法(如果有需要你完全可以實現(xiàn)所有聲明的方法)巷疼,這個時候NSProxy類就派上用場了,NSProxy,它是個抽象的超類灵奖,它實現(xiàn)了一些消息轉(zhuǎn)發(fā)的方法嚼沿,可以繼承它實現(xiàn)一些類的替身類或者是虛擬出一個不存在的類。瓷患。當(dāng)然你如果使用繼承自NSObject類的對象也可以實現(xiàn)骡尽,但是有可能會引入更多的包,容易導(dǎo)致沖突擅编。而NSProxy通過提供了一個不含多余內(nèi)容的簡潔超類來避免此種情況的發(fā)生攀细。

根協(xié)議 NSObject

實際上我們很少用到其他的根類,所以NSObject協(xié)議也很少在編程中出現(xiàn)爱态,用到最多的地方就是在你自定義的協(xié)議中谭贪。
比如,假如我們自己定義個協(xié)議MyProtocol:

@protocol MyProtocol 
- (void)foo; 
@end

有一個類Obj遵循了你這個協(xié)議:

@interface Obj:NSObject<MyProtocol>
@end

你可以這樣調(diào)用- (void)foo:

Obj *obj锦担;
[obj foo];

但是不能調(diào)用 description 和 isEqual 這些在NSObject協(xié)議中聲明的方法:

[obj description];
[obj isEqual: obj2];  

因為你的協(xié)議中只聲明了 - (void)foo這一個方法俭识。怎么辦呢,協(xié)議是可以繼承的洞渔,所以在定義協(xié)議的時候套媚,我們自己定義的協(xié)議需要繼承自根協(xié)議NSObject。

@protocol MyProtocol<NSObject> 
- (void)foo; 
@end

這樣對象不僅遵從了MyProtocol磁椒,而且也同時遵從了NSObject協(xié)議堤瘤,可以響應(yīng)這兩個協(xié)議中的消息。正因為你應(yīng)用中所有的對象都繼承于NSObject類并且遵循NSObject協(xié)議衷快,這樣在實現(xiàn)MyProtocol的實例時不需要更多條件就可以使用NSObject的一般方法宙橱。

</br>

我的理解:NSObject協(xié)議定義了一些標(biāo)準(zhǔn)的接口,而NSProxy類或者其他根類遵循這個協(xié)議蘸拔,這樣就形成了一個相對統(tǒng)一的接口實現(xiàn)师郑,在發(fā)送消息調(diào)用的時候比較方便。對于NSObject根類來說调窍,它遵循了NSObject協(xié)議宝冕,所有繼承于它的類都實現(xiàn)了NSObject協(xié)議中的方法,這樣在之后的使用中可以就可以調(diào)用NSObject的一般方法邓萨。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末地梨,一起剝皮案震驚了整個濱河市菊卷,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌宝剖,老刑警劉巖洁闰,帶你破解...
    沈念sama閱讀 219,427評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異万细,居然都是意外死亡扑眉,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,551評論 3 395
  • 文/潘曉璐 我一進(jìn)店門赖钞,熙熙樓的掌柜王于貴愁眉苦臉地迎上來腰素,“玉大人,你說我怎么就攤上這事雪营」В” “怎么了?”我有些...
    開封第一講書人閱讀 165,747評論 0 356
  • 文/不壞的土叔 我叫張陵献起,是天一觀的道長洋访。 經(jīng)常有香客問我,道長征唬,這世上最難降的妖魔是什么捌显? 我笑而不...
    開封第一講書人閱讀 58,939評論 1 295
  • 正文 為了忘掉前任茁彭,我火速辦了婚禮总寒,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘理肺。我一直安慰自己摄闸,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,955評論 6 392
  • 文/花漫 我一把揭開白布妹萨。 她就那樣靜靜地躺著年枕,像睡著了一般。 火紅的嫁衣襯著肌膚如雪乎完。 梳的紋絲不亂的頭發(fā)上熏兄,一...
    開封第一講書人閱讀 51,737評論 1 305
  • 那天,我揣著相機(jī)與錄音树姨,去河邊找鬼摩桶。 笑死,一個胖子當(dāng)著我的面吹牛帽揪,可吹牛的內(nèi)容都是我干的硝清。 我是一名探鬼主播,決...
    沈念sama閱讀 40,448評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼转晰,長吁一口氣:“原來是場噩夢啊……” “哼芦拿!你這毒婦竟也來了士飒?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,352評論 0 276
  • 序言:老撾萬榮一對情侶失蹤蔗崎,失蹤者是張志新(化名)和其女友劉穎酵幕,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體缓苛,經(jīng)...
    沈念sama閱讀 45,834評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡裙盾,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,992評論 3 338
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了他嫡。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片番官。...
    茶點故事閱讀 40,133評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖钢属,靈堂內(nèi)的尸體忽然破棺而出徘熔,到底是詐尸還是另有隱情,我是刑警寧澤淆党,帶...
    沈念sama閱讀 35,815評論 5 346
  • 正文 年R本政府宣布酷师,位于F島的核電站,受9級特大地震影響染乌,放射性物質(zhì)發(fā)生泄漏山孔。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,477評論 3 331
  • 文/蒙蒙 一荷憋、第九天 我趴在偏房一處隱蔽的房頂上張望台颠。 院中可真熱鬧,春花似錦勒庄、人聲如沸串前。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,022評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽荡碾。三九已至,卻和暖如春局装,著一層夾襖步出監(jiān)牢的瞬間坛吁,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,147評論 1 272
  • 我被黑心中介騙來泰國打工铐尚, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留拨脉,地道東北人。 一個月前我還...
    沈念sama閱讀 48,398評論 3 373
  • 正文 我出身青樓塑径,卻偏偏與公主長得像女坑,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子统舀,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,077評論 2 355

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

  • 轉(zhuǎn)至元數(shù)據(jù)結(jié)尾創(chuàng)建: 董瀟偉匆骗,最新修改于: 十二月 23, 2016 轉(zhuǎn)至元數(shù)據(jù)起始第一章:isa和Class一....
    40c0490e5268閱讀 1,721評論 0 9
  • ?NSObject作為一個基類劳景,這個類遵守了NSObject協(xié)議,并且實現(xiàn)了NSObject協(xié)議里的所有方法碉就,所以...
    尋形覓影閱讀 1,506評論 3 4
  • 我們常常會聽說 Objective-C 是一門動態(tài)語言盟广,那么這個「動態(tài)」表現(xiàn)在哪呢?我想最主要的表現(xiàn)就是 Obje...
    Ethan_Struggle閱讀 2,195評論 0 7
  • 轉(zhuǎn)載:http://yulingtianxia.com/blog/2014/11/05/objective-c-r...
    F麥子閱讀 735評論 0 2
  • 為什么可以重名瓮钥? 在分析這兩個的區(qū)別之前筋量,我們先思考一個問題,為啥這兩個長一樣的東西不會發(fā)生命名沖突呢碉熄?因為在 O...
    花與少年_閱讀 1,240評論 0 6