id和NSObject的區(qū)別和聯(lián)系

1.NSObject包含了一些其他的方法全蝶,需要實(shí)現(xiàn)NSObject協(xié)議悼枢,可以用NSObject來(lái)表示id锄开,但是不能用id來(lái)表示NSObject

2.id關(guān)鍵字在編譯的時(shí)候不會(huì)被檢查炒刁,而NSObject在編譯的時(shí)候被被檢查是否含有一些錯(cuò)誤的方法

3.id可以是任何對(duì)象坠七,包括不是NSObject的對(duì)象

4.定義id的時(shí)候不需要*见转,而定義NSOject的時(shí)候需要命雀。

網(wǎng)站:http://blog.csdn.net/linjinxing/article/details/9994903

如下:

1. id foo1;

2.NSObject *foo2;

3.id<NSObject>?foo3;


第一種是最常用,它簡(jiǎn)單地申明了指向?qū)ο蟮闹羔樥扼铮瑳](méi)有給編譯器任何類(lèi)型信息吏砂,因此,編譯器不會(huì)做類(lèi)型檢查乘客。但也因?yàn)槭沁@樣狐血,你可以發(fā)送任何信息給id類(lèi)型的對(duì)象。這就是為什么+alloc返回id類(lèi)型易核,但調(diào)用[[Foo alloc] init]不會(huì)產(chǎn)生編譯錯(cuò)誤匈织。

因此,id類(lèi)型是運(yùn)行時(shí)的動(dòng)態(tài)類(lèi)型牡直,編譯器無(wú)法知道它的真實(shí)類(lèi)型缀匕,即使你發(fā)送一個(gè)id類(lèi)型沒(méi)有的方法,也不會(huì)產(chǎn)生編譯警告碰逸。

我們知道乡小,id類(lèi)型是一個(gè)Objective-C對(duì)象,但并不是都指向繼承自NSOjbect的對(duì)象饵史,即使這個(gè)類(lèi)型和NSObject對(duì)象有很多共同的方法满钟,像retain和release。要讓編譯器知道這個(gè)類(lèi)繼承自NSObject胳喷,一種解決辦法就是像第2種那樣湃番,使用NSObject靜態(tài)類(lèi)型,當(dāng)你發(fā)送NSObject沒(méi)有的方法吭露,像length或者count時(shí)吠撮,編譯器就會(huì)給出警告。這也意味著奴饮,你可以安全地使用像retain纬向,release,description這些方法戴卜。

因此逾条,申明一個(gè)通用的NSObject對(duì)象指針和你在其它語(yǔ)言里做的類(lèi)似,像Java投剥,但其它語(yǔ)言有一定的限制师脂,沒(méi)有像Objective-C這樣靈活。并不是所有的Foundation/Cocoa對(duì)象都繼承息NSObject,比如NSProxy就不從NSObject繼承吃警,所以你無(wú)法使用NSObject*指向這個(gè)對(duì)象糕篇,即使NSProxy對(duì)象有release和retain這樣的通用方法。為了解決這個(gè)問(wèn)題酌心,這時(shí)候拌消,你就需要一個(gè)指向擁有NSObject方法對(duì)象的指針,這就是第3種申明的使用情景安券。

id告訴編譯器墩崩,你不關(guān)心對(duì)象是什么類(lèi)型,但它必須遵守NSObject協(xié)議(protocol)侯勉,編譯器就能保證所有賦值給id類(lèi)型的對(duì)象都遵守NSObject協(xié)議(protocol)鹦筹。這樣的指針可以指向任何NSObject對(duì)象,因?yàn)镹SObject對(duì)象遵守NSObject協(xié)議(protocol)址貌,而且铐拐,它也可以用來(lái)保存NSProxy對(duì)象,因?yàn)樗沧袷豊SObject協(xié)議(protocol)练对。這是非常強(qiáng)大遍蟋,方便且靈活,你不用關(guān)心對(duì)象是什么類(lèi)型螟凭,而只關(guān)心它實(shí)現(xiàn)了哪些方法匿值。

現(xiàn)在你知道你要用什么類(lèi)型了不?

如果你不需要任何的類(lèi)型檢查赂摆,使用id,它經(jīng)常作為返回類(lèi)型钟些,也經(jīng)常用于申明代理(delegate)類(lèi)型烟号。因?yàn)榇眍?lèi)型通常在運(yùn)行時(shí),才會(huì)檢查是否實(shí)現(xiàn)了那些方法政恍。

如果真的需要編譯器檢查汪拥,那你就考慮使用第2種或者第3種。很少看到NSObject*能正常運(yùn)行篙耗,但id無(wú)法正常運(yùn)行的迫筑。使用協(xié)議(protocol)的優(yōu)點(diǎn)是,它能指向NSProxy對(duì)象宗弯,而更常用的情況是脯燃,你只想知道某個(gè)對(duì)象遵守了哪個(gè)協(xié)議,而不用關(guān)心它是什么類(lèi)型蒙保。

補(bǔ)充:使用id<NSObject>來(lái)聲明一個(gè)對(duì)象辕棚,相當(dāng)于告訴編譯我們并不知道這個(gè)對(duì)象的類(lèi)型,但是它實(shí)現(xiàn)NSObject protocol。一個(gè)這種類(lèi)型的指針逝嚎,即可以用來(lái)指向NSObject*對(duì)象扁瓢,也可以用來(lái)指向NSProxy*對(duì)象,因?yàn)镹SObject對(duì)象與NSProxy對(duì)象都是現(xiàn)了NSObject protocol

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末补君,一起剝皮案震驚了整個(gè)濱河市引几,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌挽铁,老刑警劉巖伟桅,帶你破解...
    沈念sama閱讀 216,843評(píng)論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異屿储,居然都是意外死亡贿讹,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,538評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén)够掠,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)民褂,“玉大人,你說(shuō)我怎么就攤上這事疯潭∩蘅埃” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,187評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵竖哩,是天一觀的道長(zhǎng)哭廉。 經(jīng)常有香客問(wèn)我,道長(zhǎng)相叁,這世上最難降的妖魔是什么遵绰? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,264評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮增淹,結(jié)果婚禮上椿访,老公的妹妹穿的比我還像新娘。我一直安慰自己虑润,他們只是感情好成玫,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,289評(píng)論 6 390
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著拳喻,像睡著了一般哭当。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上冗澈,一...
    開(kāi)封第一講書(shū)人閱讀 51,231評(píng)論 1 299
  • 那天钦勘,我揣著相機(jī)與錄音,去河邊找鬼亚亲。 笑死个盆,一個(gè)胖子當(dāng)著我的面吹牛脖岛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播颊亮,決...
    沈念sama閱讀 40,116評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼柴梆,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了终惑?” 一聲冷哼從身側(cè)響起绍在,我...
    開(kāi)封第一講書(shū)人閱讀 38,945評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎雹有,沒(méi)想到半個(gè)月后偿渡,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,367評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡霸奕,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,581評(píng)論 2 333
  • 正文 我和宋清朗相戀三年溜宽,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片质帅。...
    茶點(diǎn)故事閱讀 39,754評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡适揉,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出煤惩,到底是詐尸還是另有隱情嫉嘀,我是刑警寧澤,帶...
    沈念sama閱讀 35,458評(píng)論 5 344
  • 正文 年R本政府宣布魄揉,位于F島的核電站剪侮,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏洛退。R本人自食惡果不足惜瓣俯,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,068評(píng)論 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望兵怯。 院中可真熱鬧降铸,春花似錦、人聲如沸摇零。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,692評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)驻仅。三九已至,卻和暖如春登渣,著一層夾襖步出監(jiān)牢的瞬間噪服,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,842評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工胜茧, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留粘优,地道東北人仇味。 一個(gè)月前我還...
    沈念sama閱讀 47,797評(píng)論 2 369
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像雹顺,于是被迫代替她去往敵國(guó)和親丹墨。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,654評(píng)論 2 354

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