Programming with Objective-C 翻譯計劃(1)--- 介紹

關(guān)于 Objective-C

當你編寫 OS X 和 iOS 軟件時,Objective-C 將是你主要使用的語言渤弛。它對 C 語言進行了拓展巾乳,并提供了面向?qū)ο蟮奶匦院蛣討B(tài)運行時。Objective-C 沿用了 C 語言的語法規(guī)則厂僧,原始類型扣草,和控制流語句,并加入了定義類和方法的語法規(guī)則颜屠。它在提供動態(tài)綁定和動態(tài)派發(fā)辰妙,推遲重要事項到運行時執(zhí)行的同時,也在語言層面上加入了對對象圖管理以及對象字面量的支持甫窟。

一瞥

這份文檔介紹了 Objective-C 語言并且大量的使用范例密浑。你將會學到如何通過創(chuàng)建自己的類來自定義對象,并且學會如何使用 Cocoa 和 Cocoa Touch 庫提供的類粗井。 盡管這些庫中的類與語言是分離的尔破,但是對他們的使用是與 Objective-C 編程緊密結(jié)合在一起的,并且很多 Objective-C 語言級別特性依賴于這些類提供的實現(xiàn)浇衬。

一個應(yīng)用架構(gòu)在對象的網(wǎng)絡(luò)之上

當你想要編寫一個 OS X 或 iOS 應(yīng)用呆瞻,你將花大部分的時間與對象打交道。這些對象是 Objective-C 類的實例径玖,其中一部分類是由 Cocoa 和 Cocoa Touch庫提供的痴脾,一部分需要你自己編寫。

編寫自己的類時梳星,你需要提供一份類的描述來給類的實例細化默認公開的接口赞赖。接口包含封裝相關(guān)數(shù)據(jù)的公開屬性,并包含一系列方法冤灾。方法聲明指出了一個對象可以接受的消息前域,并且指明了方法被調(diào)用時需要提供的參數(shù)。你還需要提供一份類的實現(xiàn)韵吨,用來提供在接口中聲明的每一個方法的可執(zhí)行代碼匿垄。

類別拓展已有的類

當你想給一個已有類添加并不復雜的行為,與其創(chuàng)造一個全新的類,還不如定義一個類別椿疗。你可以用類別給任何的類添加方法漏峰,包括你并不持有實現(xiàn)源代碼的類,比如框架類NSString

如果你擁有類的源代碼届榄,你可以用類拓展來添加新的屬性浅乔,或修改已有屬性的特性。類拓展經(jīng)常在單一源代碼或自定義庫的私有實現(xiàn)中被用于隱藏私有行為铝条。

協(xié)議定義消息協(xié)議

Objective-C 應(yīng)用的大部分工作都是由對象之間相互傳遞消息形成的靖苇。通常,這些消息是由類的接口中被明確聲明的方法來定義的班缰。但是有時候贤壁,如果能定義并不與某一特定類相關(guān)的一組相關(guān)的消息會很有用。

Objective-C 通過協(xié)議定義一組相關(guān)的方法埠忘,例如對象請求代理的方法脾拆,這些方法要么是可選的要么是必須的。任何類都可以表明它采用了協(xié)議给梅,這就意味著它必須提供協(xié)議中列出的必須實現(xiàn)的方法的實現(xiàn)假丧。

值和集合通常作為 Objective-C 的對象

在 Objective-C 中用 Cocoa 和 Cocoa Touch類來表示值很常見。NSString 類用于字符串的自負动羽, NSNumber類用于不同的數(shù)字類型包帚,比如整數(shù)或浮點數(shù),NSValue類用于其他值运吓,比如 C 結(jié)構(gòu)體渴邦。你也可以使用 C 語言定義的任何原始類型,比如 int, float, char拘哨。

集合通常以集合類型的實例的形式存在谋梭, 用于收集其他 Objective-C 對象,比如NSArray, NSSet, NSDictionary

Blocks 簡化常規(guī)任務(wù)

Blocks 是一種被引入 C倦青,Objective-C 和 C++ 的一種語言特性瓮床,用來表示工作的一個單元;Block 囊括了一塊代碼以及這塊代碼被捕獲時的狀態(tài)产镐,這使得他們與其他編程語言中閉包的概念列斯隘庄。閉包通常被用于簡化常規(guī)任務(wù),如集合遍歷癣亚,分類和測試丑掺。Block使用如GCD這樣的技術(shù)也使得同步或異步作業(yè)的調(diào)度更加簡單。

錯誤對象被用于運行時錯誤

盡管 Objective-C 包含異常處理的語法述雾,但 Cocoa 和 Cocoa Touch僅在處理編程錯誤(如數(shù)組越界訪問)時使用異常處理街州,并且異常應(yīng)在應(yīng)用下次運行前被修復兼丰。

所有其他的錯誤,包括運行時錯誤比如存儲不夠或無網(wǎng)絡(luò)連接唆缴,可以被 NSError的類實例來表示鳍征。為了在出錯時給用戶最好的用戶體驗,你的應(yīng)用應(yīng)該對錯誤有所準備并弄清如何處理最好琐谤。

Objectice-C 的代碼遵守已有的約定

當編寫 Objectice-C 代碼時蟆技,你應(yīng)該牢記一些已有的編程約定玩敏。 比如斗忌,方法名以小寫字母開頭,如果有多個單詞應(yīng)使用駝峰命名法旺聚;比如织阳, doSomething or doSomethingElse。并且砰粹,重要的不僅僅是大寫唧躲,你還應(yīng)該注意代碼的可讀性要好,這就意味著方法名表達性要好碱璃,但不至于太啰嗦弄痹。

除此之外,如果你想利用語言和框架的特性嵌器,還有一些要遵守的約定肛真。比如,屬性訪問方法必須嚴格的遵守命名約定以利用如 Key-Value Coding (KVC) 和 Key-Value Observing (KVO) 這樣的技術(shù)爽航。

先決條件

如果你是第一次接觸 OS X 或 iOS 開發(fā)蚓让,在閱讀本文檔之前,你應(yīng)該先閱讀一下 Start Developing iOS Apps TodayStart Developing Mac Apps Today 來對 iOS 和 OS X 應(yīng)用開發(fā)有一個整體的了解讥珍。除此之外历极,在嘗試大部分章節(jié)結(jié)尾的習題之前,你應(yīng)該先熟悉 Xcode 的使用衷佃。Xcode 是用來搭建 iOS 和 OS X 應(yīng)用的IDE趟卸。你將自己動手編寫代碼,搭建你應(yīng)用的交互界面氏义,測試你的應(yīng)用锄列,并且調(diào)試解決任何問題。

相關(guān)文獻

這個文檔中的內(nèi)容適用于 Xcode 4.4 及其之后的版本并假定你使用的是 OS X c10.7 及其之后的版本觅赊,或 iOS 6 及其之后的版本右蕊。獲取更多關(guān)于 Xcode 的信息,見 Xcode User Guide吮螺。獲取更多關(guān)于語言特性可利用性饶囚,見 Objective-C Feature Availability Index帕翻。

Objective-C 應(yīng)用使用引用計數(shù)來管理對象的生命周期。 大部分時候萝风,編譯器的自動引用計數(shù)特性會替你負責對象的內(nèi)存管理嘀掸。如果你無法利用 ARC, 或者你需要轉(zhuǎn)換或保留手動管理內(nèi)存的遺留代碼规惰,你應(yīng)該閱讀 Advanced Memory Management Programming Guide睬塌。

除了編譯器,Objective-C 還使用一個運行時系統(tǒng)來保證其動態(tài)性和面向?qū)ο筇匦孕颉km然你并不經(jīng)常需要考慮 Objective-C 是如何運作的揩晴,但還是有可能需要直接與這個運行時系統(tǒng)打交道,了解運行時贪磺,見 Objective-C Runtime Programming Guide and Objective-C Runtime Reference硫兰。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市寒锚,隨后出現(xiàn)的幾起案子劫映,更是在濱河造成了極大的恐慌,老刑警劉巖刹前,帶你破解...
    沈念sama閱讀 218,284評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件泳赋,死亡現(xiàn)場離奇詭異,居然都是意外死亡喇喉,警方通過查閱死者的電腦和手機祖今,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,115評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來轧飞,“玉大人衅鹿,你說我怎么就攤上這事」В” “怎么了大渤?”我有些...
    開封第一講書人閱讀 164,614評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長掸绞。 經(jīng)常有香客問我泵三,道長,這世上最難降的妖魔是什么衔掸? 我笑而不...
    開封第一講書人閱讀 58,671評論 1 293
  • 正文 為了忘掉前任烫幕,我火速辦了婚禮,結(jié)果婚禮上敞映,老公的妹妹穿的比我還像新娘较曼。我一直安慰自己,他們只是感情好振愿,可當我...
    茶點故事閱讀 67,699評論 6 392
  • 文/花漫 我一把揭開白布捷犹。 她就那樣靜靜地躺著弛饭,像睡著了一般。 火紅的嫁衣襯著肌膚如雪萍歉。 梳的紋絲不亂的頭發(fā)上侣颂,一...
    開封第一講書人閱讀 51,562評論 1 305
  • 那天,我揣著相機與錄音枪孩,去河邊找鬼憔晒。 笑死,一個胖子當著我的面吹牛蔑舞,可吹牛的內(nèi)容都是我干的拒担。 我是一名探鬼主播,決...
    沈念sama閱讀 40,309評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼斗幼,長吁一口氣:“原來是場噩夢啊……” “哼澎蛛!你這毒婦竟也來了抚垄?” 一聲冷哼從身側(cè)響起蜕窿,我...
    開封第一講書人閱讀 39,223評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎呆馁,沒想到半個月后桐经,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,668評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡浙滤,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,859評論 3 336
  • 正文 我和宋清朗相戀三年阴挣,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片纺腊。...
    茶點故事閱讀 39,981評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡畔咧,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出揖膜,到底是詐尸還是另有隱情誓沸,我是刑警寧澤,帶...
    沈念sama閱讀 35,705評論 5 347
  • 正文 年R本政府宣布壹粟,位于F島的核電站拜隧,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏趁仙。R本人自食惡果不足惜洪添,卻給世界環(huán)境...
    茶點故事閱讀 41,310評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望雀费。 院中可真熱鬧干奢,春花似錦、人聲如沸盏袄。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,904評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至炭菌,卻和暖如春罪佳,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背黑低。 一陣腳步聲響...
    開封第一講書人閱讀 33,023評論 1 270
  • 我被黑心中介騙來泰國打工赘艳, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人克握。 一個月前我還...
    沈念sama閱讀 48,146評論 3 370
  • 正文 我出身青樓蕾管,卻偏偏與公主長得像,于是被迫代替她去往敵國和親菩暗。 傳聞我的和親對象是個殘疾皇子掰曾,可洞房花燭夜當晚...
    茶點故事閱讀 44,933評論 2 355

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