自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

為什么Objective-C很難

移動(dòng)開發(fā) iOS
作為一個(gè)Objective-C的coder,我總能聽到一部分人在這門語言上抱怨有很多問題。他們總在想快速學(xué)習(xí)這門語言來寫一個(gè)App出來,但他們也總是聯(lián)想到Objective-C看上去實(shí)在太難了或者在想這些語法符號(hào)都是神馬玩意?不錯(cuò),他們問得非常好,所以本人也解釋一下為什么很多程序員相比較學(xué)習(xí)Ruby或者Java很容易,但在決定開發(fā)iOS或者OS X應(yīng)用時(shí)會(huì)那么猶豫。

語法:

首先我們談?wù)勆耨R叫做編程語言,編程語言是一種讓人們能讀懂并且能夠展現(xiàn)程序的執(zhí)行行為的語言,包括語法(正確的表達(dá)式以及狀態(tài)機(jī)的使用規(guī)則)以及語義(如何去組織這些表達(dá)式以及狀態(tài)機(jī)以一種有意義的方式去完成我們的目標(biāo))

大部分編程語言都是基于C語法風(fēng)格的,也就是我們常說的點(diǎn)語法,依靠小數(shù)點(diǎn)符號(hào)來調(diào)用方法或者獲取類的成員(當(dāng)然了,在C語言中類被替代為結(jié)構(gòu)體)。它們通常都是自己實(shí)現(xiàn)類的定義(注意在這里Java與C#和 C++有稍微一點(diǎn)不一樣),但無論如何這些語言的具體細(xì)節(jié)都是一樣的。當(dāng)我們接觸一個(gè)新的編程語言時(shí),我們當(dāng)然很樂意看到新語言的語法是我們似曾相識(shí)的。畢竟大部分程序員都了解C語言的語法。

然而Objective-C壓根就不是C語法風(fēng)格的編程語言。它與我們熟悉的語言語法區(qū)別太大以至于大部分程序員根本看不懂這些Objective-C代碼是神馬東西。

甚至其他一些像Python或者Ruby這樣的“奇怪”的語言都能讓人看個(gè)大概出來,畢竟Python與Ruby至少還是點(diǎn)語法風(fēng)格的,使用點(diǎn)語法來調(diào)用方法以及獲取類的成員。相反它們?nèi)狈Ψ种ЫY(jié)構(gòu)并不會(huì)長時(shí)間影響程序員的理解,畢竟這兩種語言也有自己的方式來完成同樣的目標(biāo)。

下面我們來介紹一下Objective-C語言: 這里我會(huì)拿另一個(gè)OOP語言來與它進(jìn)行比較

我想這里大家肯定還不會(huì)有什么問題,來看看這個(gè):

好了好了,我想肯定有部分人想問一大堆問題了。但這還不是最糟糕的,我們接著來看一個(gè)更強(qiáng)悍的:

一般到了這里,我想大家都頭都大了幾圈。

這到底是個(gè)神馬情形?這么多分號(hào)!太恐怖了!接著會(huì)冒出一大堆問題:這到底調(diào)用的是神馬方法?又是怎么調(diào)用的?是performAction嗎還是別的東西?方法重載該如何做?哦,我的天!

最好先忘了我們熟悉的方法調(diào)用。實(shí)際上,當(dāng)你看到performAction:withTwoParameters:時(shí),我們其實(shí)在談?wù)撓⒍皇欠椒?。?dāng)你能這么理解時(shí)問題就好辦多了。

實(shí)際上Objective-C是很嚴(yán)格的C語言的超集。而與流行的編程語言風(fēng)格又差距太大。作為C語言的超集,它增加了很多東西,我們將簡單看看它到底增加了什么復(fù)雜的東西。

Objective-C是一個(gè)很“大”的語言,我是說它的語法很復(fù)雜而且又具備彈性。Apple公司已經(jīng)盡可能減小了Objective-C語言的體積,然而,他們還是添加了一些東西來讓Objecive-C表達(dá)式更加簡單。

  • Synthesizing properties
  • Dot-syntax for accessing getters/setters
  • Garbage Collection
  • Blocks (closures)
  • Automatic Reference Counting
  • Weak references

所以雖然這個(gè)語言越來越大了,但是在表達(dá)同樣的目的使用的代碼卻越來越簡單。

運(yùn)行時(shí):

Objective-C的運(yùn)行時(shí)是動(dòng)態(tài)的,它能讓你在運(yùn)行時(shí)為類添加方法或者去除方法以及使用反射。

除非你用過像Ruby或者Lisp這類支持這種特性的語言,否則你會(huì)感覺很怪異。但請放心!在你嘗試使用一些好的新特性時(shí)一開始都是很郁悶的。

框架:

如果離開了Cocoa/Cocoa Touch框架,那么Objective-C簡直沒法創(chuàng)建App。就如同Ruby離開了Rails就沒法創(chuàng)建Web應(yīng)用程序一樣。

Cocoa既大又老。比如看看UIView的contentStretch屬性,整個(gè)頭文件就這么點(diǎn)東西:

  1. @property(nonatomic) CGRect contentStretch __OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_3_0);
  2.  // animatable. default is unit rectangle {{0,0} {1,1}} 

就這么多?首先我假定它定義了一個(gè)可拉伸的內(nèi)容區(qū)域,但是這是如何做到的?矩形單元又在哪里?Cocoa/Cocoa-Touch是解釋這個(gè)的唯一途徑,作為Objective-C的新人,你可以去咨詢它。

歷史:

縱向看來,Apple公司領(lǐng)導(dǎo)著Objective-C語言的發(fā)展與維護(hù),包括Objective-C運(yùn)行時(shí),Cocoa/Cocoa-Touch框架以及Objective-C語言的編譯器??瓷先bjective-C就如同以下一個(gè)云狀圖:

當(dāng)你去學(xué)習(xí)Objective-C時(shí),它不僅僅就是一個(gè)框架,一個(gè)運(yùn)行時(shí)或者一個(gè)編譯器;而是它們?nèi)?。還有個(gè)很重要的部件就是 Automatic Reference Counting(使用后無法直接調(diào)用dealloc方法),這玩意會(huì)讓你使用Cocoa/Cocoa-Touch編程時(shí)更加方便。

緊密耦合系統(tǒng)代碼設(shè)計(jì)是Objective-C獨(dú)有的。其他語言比如在.Net框架下運(yùn)行的Iron Python。以及一大堆運(yùn)行在JVM的非Java語言,比如Clojure。甚至Ruby以及Rails都是兩個(gè)不同的項(xiàng)目。當(dāng)你打算使用其他語言配合 Cocoa/Cocoa-Touch以及Objective-C運(yùn)行時(shí)時(shí)。你唯一的選擇就是Mac Ruby。

未來 :

這4年來,我們可以看到Apple公司已經(jīng)盡可能的減小了Objective-C語言的大小以及復(fù)雜度。他們也完成了手動(dòng)內(nèi)存自動(dòng)管理以及經(jīng)典C頭文件的方式;而且開始慢慢對(duì)屬性存取器引入點(diǎn)語法以及 Automatic Reference Counting來方便程序員編程。但就現(xiàn)在看來,Objective-C還是比較難接觸與學(xué)習(xí)的;之所以現(xiàn)在變得越來越流行唯一的原因就是它是做iOS app的唯一途徑了。

責(zé)任編輯:佚名 來源: 開源中國社區(qū)
相關(guān)推薦

2014-07-14 09:58:18

Objective-CiOS學(xué)習(xí)

2015-09-07 09:53:02

Objective-CRuntime

2011-08-10 18:07:29

Objective-C反射

2011-05-11 15:58:34

Objective-C

2013-03-27 12:54:00

iOS開發(fā)Objective-C

2013-06-20 10:40:32

Objective-C實(shí)現(xiàn)截圖

2011-05-11 11:20:26

Objective-C

2017-02-10 09:55:53

SwiftObjective-C

2011-08-04 14:58:37

Objective-C Cocoa NSString

2011-08-02 13:16:36

Objective-C 語法 函數(shù)

2011-05-11 13:54:08

Objective-C

2011-05-11 15:45:50

內(nèi)存管理Objective-C

2013-08-21 14:57:42

objective-c問題

2011-05-11 14:06:49

Objective-C

2011-08-04 11:15:46

Objective-C 構(gòu)造函數(shù) 構(gòu)造方法

2014-04-30 10:16:04

Objective-CiOS語法

2011-08-03 16:55:05

Objective-C 代理

2011-07-08 13:49:46

Objective-C UUID

2011-07-29 16:16:30

Objective-c block

2011-08-04 09:35:09

Objective-C 編碼規(guī)范
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)