青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

兔子的技術(shù)博客

兔子

   :: 首頁(yè) :: 聯(lián)系 :: 聚合  :: 管理
  202 Posts :: 0 Stories :: 43 Comments :: 0 Trackbacks

留言簿(10)

最新評(píng)論

閱讀排行榜

評(píng)論排行榜

最近稍微學(xué)習(xí)了一點(diǎn) Objective-C ,做筆記和做編碼練習(xí)都是鞏固學(xué)習(xí)的好方法。整理記錄腦子里的新知識(shí)有助于理清思路,發(fā)現(xiàn)知識(shí)盲點(diǎn)以及錯(cuò)誤的理解。

Objective-C 和 C++ 同樣從兼容 C 語(yǔ)言開(kāi)始,以給 C 語(yǔ)言增加面向?qū)ο鬄槌踔裕麄兊某霈F(xiàn)的時(shí)間都很類似(1983 年左右)。但面向?qū)ο缶幊痰脑搭^卻不同:C++ 受 Simula 和 Ada 的影響比較多,而 Objective-C 的相關(guān)思想源至 Smalltalk ,最終的結(jié)果是他們?cè)趯?duì)象模型上有不小的差異。

以我這些天粗淺的了解,Objective-C 似乎比 C++ 更強(qiáng)調(diào)類型的動(dòng)態(tài)性,而犧牲了一些執(zhí)行性能。不過(guò)這些犧牲,由于模型清晰,可以在今天,由更先進(jìn)的編譯技術(shù)來(lái)彌補(bǔ)了。

我對(duì) C++ 的認(rèn)知比 Objective-C 要多的多,所以對(duì) C++ 開(kāi)發(fā)中會(huì)遇到的問(wèn)題的了解也多的多。在學(xué)習(xí) Objective-C 的過(guò)程中,我發(fā)現(xiàn)很多地方都可以填上曾經(jīng)在 C++ 開(kāi)發(fā)中遇到的問(wèn)題。當(dāng)然,Objective-C 一定也有它自己的坑,只是我才剛開(kāi)始,沒(méi)有踩到過(guò)罷了。


ObjC 的類方法調(diào)用的形式,更接近于向?qū)ο蟀l(fā)送消息。語(yǔ)法寫(xiě)作:

[obj message]

如果方法帶有參數(shù),那么就寫(xiě)作

[obj param:value]

方法和名稱和參數(shù)的名稱是一體的,參數(shù)決定了方法是什么。如果有多個(gè)參數(shù),那么寫(xiě)作:

[obj param1:value1 param2:value2]

注意,如果一個(gè)類有兩個(gè)方法,一個(gè)有一個(gè)參數(shù),一個(gè)有兩個(gè)參數(shù)。即使兩個(gè)參數(shù)的版本中有一個(gè)參數(shù)名稱和單個(gè)參數(shù)版本的相同,它們也是兩個(gè)不同的方法。ObjC 不支持默認(rèn)參數(shù)的語(yǔ)法。

C++ 調(diào)用對(duì)象的方法就更接近于 C 的函數(shù)調(diào)用。兩相比較,可以發(fā)現(xiàn) ObjC 的語(yǔ)法讓代碼可讀性更強(qiáng)。你可以很容易的理解參數(shù)的用途,也不怕方法參數(shù)過(guò)多時(shí),一串參數(shù)寫(xiě)漏或?qū)戝e(cuò)次序了。


和 C++ 一樣,ObjC 的類聲明和實(shí)現(xiàn)是分離的。但做的比 C++ 更徹底。ObjC 不能在聲明的代碼段中寫(xiě) inline 函數(shù)。這看起來(lái)犧牲了一些運(yùn)行性能,但當(dāng)實(shí)現(xiàn)部分更好的分離。作為補(bǔ)充,ObjC 有 @property ,可以幫助程序員簡(jiǎn)化實(shí)現(xiàn),也可以讓編譯器生成更好的代碼。

聲明一個(gè)類寫(xiě)成這樣:

@interface class : baseclass {    type a; }  - (void) method;  - (void) messge: (type) param;  + (id) create ;  @end 

ObjC 利用了 C 語(yǔ)言中沒(méi)有使用的符號(hào) @ 來(lái)擴(kuò)展 C 的語(yǔ)法,而不是用 C++ 里增加關(guān)鍵字的方式。這或許是一個(gè)對(duì)語(yǔ)言擴(kuò)展更簡(jiǎn)單的做法,而不用考慮兼容性。C++ 就得精心挑選新增加的關(guān)鍵字,盡量回避那些已有代碼中高頻出現(xiàn)的單詞。

類的數(shù)據(jù)段和方法是分離的。數(shù)據(jù)描述放在 {} 中,方法寫(xiě)在其后,在 @end 之前。

"-" 開(kāi)頭的方法是實(shí)例方法,也就是 C++ 中的成員方法。成員方法中可以通過(guò) self 取到實(shí)例指針,也就是 C++ 中的 this 指針。

同樣,ObjC 也支持類方法,也就是 C++ 中的 static 成員方法。通常是用來(lái)構(gòu)造實(shí)例。聲明方法是在方法名前寫(xiě)一個(gè) + 號(hào)。

和 C++ 不同,ObjC 是有類對(duì)象的。類對(duì)象里有超類指針、類名、類方法列表指針,還有類對(duì)象的字節(jié)大小等元信息。而 C++ 中是用 RTTI 類實(shí)現(xiàn)不完全的類似功能的。

調(diào)用類方法和調(diào)用實(shí)例方法在語(yǔ)法上沒(méi)有什么不同。類名就是類對(duì)象的名字。

ObjC 不支持多繼承,沒(méi)有私有、公開(kāi)這些修飾符。

ObjC 的類方法實(shí)現(xiàn)必須寫(xiě)在同一個(gè)源文件里。不像 C++ 有 :: 操作符,ObjC 在實(shí)現(xiàn)方法時(shí)不寫(xiě)類的名字,而是把所有實(shí)現(xiàn)都寫(xiě)在 @implementation class ... @end 之間。訪問(wèn)基類,也可以方便的使用 super 關(guān)鍵字。

那么,如果一個(gè)類的方法太多,不適合寫(xiě)在同一個(gè)源文件中怎么辦?


ObjC 提供了 category 這個(gè)概念。

可以通過(guò) category 為一個(gè)類添加一些方法。category 和繼承是不同的,不能為類添加新的成員變量,所以它不會(huì)改變類對(duì)象的內(nèi)存布局。添加了方法的類還是原來(lái)那個(gè)類。

category 的語(yǔ)法是這樣的:

@interface class (category)   - newmethod;  @end 

這樣,就給 class 類添加了一個(gè)方法 newmethod ,并歸類在 category 下。

和 C++ 不同,ObjC 的方法更具動(dòng)態(tài)性。你可以在運(yùn)行時(shí)任意調(diào)用一個(gè)對(duì)象的方法,而不用管它是否存在。ObjC 支持 id 這個(gè)類型。 id 其實(shí)就是對(duì)象指針,任何類型的對(duì)象都可以被 id 引用,并可以方便的向其發(fā)送消息(方法調(diào)用)。如果方法不存在,會(huì)拋出運(yùn)行時(shí)錯(cuò)誤。

向一個(gè)指定類型發(fā)送一個(gè)不存在的消息,會(huì)得到一個(gè)編譯期警告,而不是編譯錯(cuò)誤。當(dāng)然,我們不能隨便忽略編譯期警告,如果我們清楚的知道運(yùn)行期這個(gè)對(duì)象可以處理這個(gè)消息,那么可以給類加一個(gè) category 但不必實(shí)現(xiàn)它。這樣,編譯器就能了解新的方法了。

利用 category 可以方便的一個(gè)龐大的類拆分成獨(dú)立的模塊。在 C++ 中,比較接近的概念是 friend ,不過(guò) friend 不易被優(yōu)雅的使用。

既然方法可以被運(yùn)行期檢查,那么方法本身在 ObjC 中也可以被當(dāng)成一種類型來(lái)處理。比較接近的 C++ 中的概念是 成員方法指針。回顧學(xué)習(xí) C++ 的經(jīng)歷就能回憶起當(dāng)年使用 ::* 或是 ->* 的頭痛經(jīng)歷。ObjC 中的方法可以運(yùn)行期綁定, @selector(method:) 的語(yǔ)法也簡(jiǎn)單的多。

在 NSObject 中就提供了一個(gè)叫 respondsToSelector: 的方法,接受一個(gè) selector 用來(lái)檢查自己是否可以接受這個(gè)消息。


ObjC 也提供了類似 Java 的 interface 或是 C++ 的純虛類的東西,在 ObjC 中被稱為 @protocol 。

@protocol 可以看成是一種沒(méi)有數(shù)據(jù)成員的虛類。一個(gè)實(shí)際的類可以聲明自己實(shí)現(xiàn)了某些協(xié)議,語(yǔ)法是

@interface class : base <protocol> {    // variables }  // methods @end 

和繼承不同,一個(gè)類可以聲明多個(gè)協(xié)議。然后在 @implementation 中必須一一實(shí)現(xiàn)它們。

如上所述,ObjC 已經(jīng)做到了運(yùn)行期的方法綁定,所以 @protocol 只是做了更嚴(yán)格的編譯檢查。在新版的 ObjC 2.0 中,追加了 @optional 和 @required 用來(lái)描述那些方法的實(shí)現(xiàn)是可選的,哪些必須實(shí)現(xiàn)。


ObjC 的基礎(chǔ)庫(kù)比 C++ 更完整,標(biāo)準(zhǔn)化要好的多,也和語(yǔ)言結(jié)合的更緊密。

比如 NSString 是一個(gè)基礎(chǔ)類,用于處理字符串。同時(shí),語(yǔ)言也提供 @"string" 的語(yǔ)法方便的生成 NSString 對(duì)象。

ObjC 保留了 C 中的 printf 式的字符串操作形式,對(duì)比 C++ 重載移位操作符的形式,我想要更清爽一些。

對(duì)于 ObjC 對(duì)象,使用 %@ 來(lái)表示。給對(duì)象增加 description 方法就可以讓處理函數(shù)知道該如何處理這個(gè)對(duì)象的 %@ 行為。

轉(zhuǎn)自:http://blog.codingnow.com/2013/03/objective_c.html#more
posted on 2013-04-02 14:46 會(huì)飛的兔子 閱讀(341) 評(píng)論(0)  編輯 收藏 引用 所屬分類: 蘋(píng)果相關(guān)
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            日韩一区二区电影网| 久久久99免费视频| 久久久水蜜桃| 日韩一区二区福利| 亚洲欧美国产制服动漫| 精品51国产黑色丝袜高跟鞋| 亚洲国产天堂久久综合网| 久久久久久久一区二区三区| 久久综合久久综合这里只有精品| 亚洲色无码播放| 久久久精品tv| 香蕉成人伊视频在线观看| 久久精品欧美| 久久亚洲精品伦理| 欧美日韩黄视频| 久久夜色精品一区| 欧美日韩美女| 久久阴道视频| 国产伦精品一区二区三区视频黑人| 免费的成人av| 国产欧美一区二区色老头| 亚洲激情电影在线| 一区久久精品| 午夜精彩视频在线观看不卡 | 一本久久综合亚洲鲁鲁五月天| 99re66热这里只有精品3直播| 在线成人亚洲| 小黄鸭精品aⅴ导航网站入口| 亚洲精品日产精品乱码不卡| 欧美专区在线| 欧美亚洲视频| 日韩午夜免费视频| 欧美一区二区成人6969| 亚洲性图久久| 欧美日韩国产成人在线观看 | 国产精品久久久久久久第一福利 | 亚洲国产欧美在线人成| 欧美综合激情网| 久久精品久久99精品久久| 国产精品腿扒开做爽爽爽挤奶网站| 一本色道久久综合亚洲91| 99亚洲一区二区| 欧美激情五月| 久久久99爱| 一个色综合导航| 欧美极品色图| 亚洲毛片网站| 欧美日韩国产成人在线91| 亚洲精品在线看| 亚洲精品免费在线| 能在线观看的日韩av| 米奇777超碰欧美日韩亚洲| 国产午夜精品一区二区三区欧美| 一区二区高清在线| 久久亚洲国产成人| 国产在线播放一区二区三区| 欧美影院久久久| 久热精品在线| 亚洲国产一区二区精品专区| 蜜桃av噜噜一区| 国产精品v欧美精品v日韩精品| 亚洲三级影院| 欧美激情精品久久久久久黑人| 亚洲国产专区| 99视频有精品| 国产精品海角社区在线观看| 亚洲欧美日韩一区二区在线| 久久久久久久一区二区| 亚洲第一在线| 欧美激情一区二区三区四区| 99在线精品视频在线观看| 香蕉久久精品日日躁夜夜躁| 久久不见久久见免费视频1| 鲁大师影院一区二区三区| 亚洲高清色综合| 欧美日韩大片| 香蕉成人久久| 亚洲国产成人午夜在线一区| 一本到高清视频免费精品| 亚洲一区二区三区视频| 国产日韩精品一区二区三区| 久久久国产精品一区二区三区| 欧美激情91| 亚洲在线免费视频| 国语对白精品一区二区| 欧美激情综合色综合啪啪| 亚洲欧美日本精品| 欧美韩日精品| 性色av香蕉一区二区| 亚洲国产成人午夜在线一区| 欧美日韩视频一区二区| 久久激五月天综合精品| 亚洲欧洲精品一区二区三区| 欧美一区二区三区婷婷月色| 亚洲激情成人| 国产免费成人| 欧美日韩精品伦理作品在线免费观看| 羞羞漫画18久久大片| 亚洲久久一区| 一本久道久久综合狠狠爱| 国产一区二区三区不卡在线观看 | 亚洲愉拍自拍另类高清精品| 激情久久久久久久| 国产精品qvod| 亚洲天堂网站在线观看视频| 国产精品丝袜xxxxxxx| 麻豆精品在线播放| 激情成人综合| 亚洲桃色在线一区| 亚洲激情啪啪| 西西人体一区二区| 亚洲午夜视频在线| 欧美高清视频一区二区| 午夜欧美大片免费观看| 日韩视频久久| 亚洲国产欧美久久| 国产欧亚日韩视频| 国产精品大全| 欧美欧美全黄| 欧美电影免费网站| 久久久久久久久久久久久女国产乱 | 亚洲午夜精品| 亚洲国产日韩综合一区| 国产小视频国产精品| 国产精品久久激情| 一区三区视频| 国产一区自拍视频| 国产精品影音先锋| 国产精品v欧美精品v日韩| 欧美日韩成人一区二区| 欧美黄色成人网| 免费观看日韩av| 久久综合国产精品| 久久先锋影音av| 久久久亚洲综合| 久久午夜国产精品| 美女网站久久| 欧美成人a∨高清免费观看| 蜜臀av一级做a爰片久久| 久久五月激情| 欧美国产第二页| 欧美精品一区二区三区一线天视频| 欧美va亚洲va日韩∨a综合色| 蜜桃精品一区二区三区| 蜜臀av性久久久久蜜臀aⅴ四虎| 99国内精品久久| 99综合精品| 亚洲桃花岛网站| 亚洲欧美日韩网| 久久久久99| 欧美a级一区二区| 欧美精品在欧美一区二区少妇| 欧美理论大片| 欧美成人a视频| 亚洲人成人一区二区在线观看| 亚洲欧美另类久久久精品2019| 亚洲欧洲av一区二区三区久久| 欧美一区二区| 久久综合色婷婷| 亚洲国产日韩欧美综合久久| 99视频精品全国免费| 亚洲自拍偷拍麻豆| 久久久久久穴| 欧美日韩国产成人在线| 国产精品永久免费视频| 国产在线观看一区| 亚洲精品久久| 亚洲一二三区在线| 久久国产精品高清| 亚洲大片精品永久免费| 一级日韩一区在线观看| 久久精品国产久精国产爱| 欧美国产日产韩国视频| 国产精品日韩欧美大师| 蜜臀久久99精品久久久久久9| 欧美日韩成人| 国内久久精品| 国产精品99久久久久久有的能看| 午夜精品在线| 亚洲电影视频在线| 亚洲欧美一区二区三区久久| 久热精品在线视频| 国产精品视频最多的网站| 久久久噜噜噜久噜久久| 亚洲欧美成人一区二区在线电影| 久久成人免费电影| 亚洲第一网站免费视频| 亚洲午夜影视影院在线观看| 久久久久久尹人网香蕉| 欧美日韩在线一区| 在线国产亚洲欧美| 亚洲一区二区三区视频| 蜜臀久久久99精品久久久久久 | 韩国精品久久久999| aⅴ色国产欧美| 久久久噜噜噜久久中文字免| 日韩视频在线你懂得| 久久久久久久久岛国免费| 国产精品成人一区二区三区夜夜夜 | 亚洲国产三级网|