国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

為什么說Objective-C很難學?

移動開發 iOS
作為一個網絡上的活躍分子,使用Objective-C的開發者,我收到了許多圍繞Objective-C的提問。這些問題在人們學習 Objective-C或者嘗試開發app的時候會不斷跳出來,而且其中的某些問題可能籠統如“Objective-C看起來太難了”也會細致若“那個 ‘-’是干嘛用的啊?”。我要說的是這些其實都是好問題,那么接下來我就和大家探討一下:相對于Ruby或Java,為什么某些程序員對轉投iOS或者 OS X開發會心存畏懼。

作為一個網絡上的活躍分子,使用Objective-C的開發者,我收到了許多圍繞Objective-C的提問。這些問題在人們學習 Objective-C或者嘗試開發app的時候會不斷跳出來,而且其中的某些問題可能籠統如“Objective-C看起來太難了”也會細致若“那個 ‘-’是干嘛用的啊?”。我要說的是這些其實都是好問題,那么接下來我就和大家探討一下:相對于Ruby或Java,為什么某些程序員對轉投iOS或者 OS X開發會心存畏懼。

語法

先說說編程語言是什么。所謂編程語言就是一種人可以讀得懂的程序代碼。一門編程語言通常包含一系列內容:語法(語句書寫和聲明的規則)和語義(以達成某些任務為目標,把語句和聲明有效的結合起來)。

大部分(通常情況下)編程語言在方法調用上都是類似C語言的風格,訪問類成員采用.語法。(也就是C中的 structs)。雖然這些語言一般都有各自己定義類的方式(Java和C#或C++還是不大相同的),但是追究到語言的諸多細節還都是很相似的。每當人 們開始接觸一門新的編程語言的時候,如果它的語法看起來很似曾相識,會讓學習者覺得很舒服。像大多數人都是有C語法背景的,所以要學習一門類C語法的語言 的話,第一觀感會很親切。

單從語法角度來看,Objective-C可謂**別具一格**。它的語法太特別了,礙于它語法的另類,很多人沒有耐心去深究它的語義,而它的語義恰恰與C++,Java等語言沒什么區別。

像Python和Ruby這些所謂”古怪”的語言都更容易上手,僅僅是因為它們可以通過.語法來進行方法調用和訪問類成員。而且人們通常能夠迅速習慣用縮進來代替花括號。

當我向別人介紹Objective-C的時候,一般情況下,我會拿它和某個OOP(面向對象編程)語言來對比說明。

why objective-c is hard to learn 1

目前來看還OK。也許他們之前知道lisp吧,所以不難理解這句語法。

why objective-c is hard to learn 2

到這句,人們普遍覺得比較難接受,情況也變得不那么樂觀了。

why objective-c is hard to learn 3

這句可以直接讓人們崩潰了。

那些冒號是啥?太嚇人了!隨后冒出一堆問題:方法是怎么調用的?是通過performAction還是什么別的方式?方法怎么重載?

要知道,我們沒有在討論方法,我們說的是消息(messages)(我也不會去討論他們之間的區別)和selectors,好比上文所呈現的performAction:withTwoParameters。但是,大家已經懶得去了解了。

Objective-C是C的超集,它其實是一門很cool的編程語言,但是由于其自身的某些特點,相較于其他現代編程語言,人們會覺得 Objective-C很古老。作為C的超集,Objectivec-C在C的基礎上擴展了一系列非常規的特性,這恰恰增加了Objective-C的復 雜度。

Objective-C是一門大型語言。下此定義的出發點是:它的語法十分繁復。實際上,蘋果已經在加大對Objective-C瘦身的力度,比如 說,雖然速度緩慢但是終究還是完成了頭文件去標準C風格的過渡。而且,蘋果還為Objective-C做了不少改進,增加了許多新特性,使得 Objective-C的代碼更加簡練,比如:

  • Synthesizing properties
  • 通過.語法訪問getters/setters
  • 垃圾回收(Garbage Collection)
  • Blocks(閉包closures)
  • ARC(Automatic Reference Counting)
  • 弱引用(Weak references)

所以,雖然語言變得越來越龐大,但是開發編寫代碼的復雜度反而降低了。

Runtime

Objective-C是動態運行的,可能單單從其與C的淵源這個角度來看這個特性并不那么直觀。由于不需要直接編寫匯編碼,C語言自身是一門變化 較低的語言,鑒于Objective-C是C的超集,我們很容易將Objective-C的穩定性趨向于C,但現實際上,Objective-C是動態運 行的且靈活性相當高的語言。Objective-C支持函數柯里化(function currying),支持反射機制,可以在運行時動態地為類添加或移除方法。

除非你之前有接觸過類似Objectivec-C這些特性的編程語言,比如說Ruby或Lisp,否則一時間很難適應Objective-C。但是無需擔憂!有些東西,外表看起來神秘可怕其實本質沒那么復雜。

Framework

使用Objective-C構建apps完全離不開Cocoa/Cocoa Touch框架。就好像用Ruby開發web應用離不開Rails一樣。

經過經年累月的發展,Cocoa已經變得非常的厚重。不過如前文所說,蘋果最近正在逐漸的為常規iOS開發所依賴的Cocoa Touch框架進行減肥,以降低它的復雜度。即便如此,哪怕要開發的app極其簡單,也還是有許多東西要學,像蘋果的官方文檔還有已暴露的各種頭文件都是 很好的學習資源。就拿UIView中的contentStretch屬性為例,頭文件的定義和說明如下:

@property(nonatomic) CGRect contentStretch __OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_3_0);

// animatable. default is unit rectangle {{0,0} {1,1}}

這到底是什么意思呢?按照我的理解,這個屬性是用來描述可伸縮區域的大小。但是怎么實現的呢?這個區域是指一個矩形嗎?也許你永遠都不會和這個屬性 打交道,但是假如在開發過程中的某個時點和場景下使用這個屬性能夠輕松解決你的問題,那個時候你會知道它的存在并能正確的使用它嗎?

Cocoa/Cocoa-Touch是龐大的框架。要真正的駕馭它就只能靠熟能生巧了。但這個熟悉它的過程常常使很多新的學習者退縮。

History

一直以來,蘋果都在不停的推動著圍繞Objective-C語言開發體系的進步,像Objective-C runtime,Cocoa/Cocoa Touch框架以及針對Objective-C的編譯器等一系列更高層面設計的交叉重疊使得Objective-C不僅僅是一個語言這么簡單。

why objective-c is hard to learn 4

所以當學習Objective-C的時候,不能孤立的去學習這門語言、某些框架、它的運行機制或編譯器,而是要把他們融會貫通。比如說現在 Objective-C集成的ARC(Automatic Reference Counting)機制就涉及到了語義(不需要顯示調用dealloc了)層面、編譯器層面(顯而易見)、以及對Cocoa/Cocoa Touch框架的命名約定等內容。

上文所提到的圍繞Objective-C的一些列緊密關聯的設計算是其獨有的特點。其他的語言或多或少都會依賴于別的的語言或平臺來運行,比如基 于.net運行的Iron Python,不是Java但是卻依賴JVM的Clojure,甚至Ruby和Rails其實都有各自相對獨立的實體和工程。唯一一個比較知名的受 Cocoa/Cocoa Touch和Objective-C runtime支撐運行的Mac Ruby,后來也被蘋果停掉后了后續支持。

Objective-C和相關的框架、runtime以及編譯器等等這個體系對其他開發者社區而言是又幾乎是封閉的。

未來

從目前掌握的信息來看,過去的四年來蘋果一直在嘗試降低Objective-C語言的復雜度。淘汰手動內存管理以及C標準頭文件,引入更符合當下編程語言潮流的ARC機制,還有通過.語法來訪問屬性的getter/setter方法等等都是為了降低Objective-C的學習成本。但是即便如此,Objective-C仍然是具備一定學習門檻的開發語言,它的熱度完全那些基于Objective-C編寫的熱門iOS應用帶起來的。

責任編輯:閆佳明
相關推薦

2012-03-07 13:43:59

Objective-C

2015-09-07 09:53:02

Objective-CRuntime

2011-08-10 18:07:29

Objective-C反射

2013-06-20 10:40:32

Objective-C實現截圖

2013-03-27 12:54:00

iOS開發Objective-C

2011-05-11 15:58:34

Objective-C

2011-05-11 11:20:26

Objective-C

2017-02-10 09:55:53

SwiftObjective-C

2011-08-04 11:15:46

Objective-C 構造函數 構造方法

2011-08-04 14:58:37

Objective-C Cocoa NSString

2013-08-21 14:57:42

objective-c問題

2011-08-02 13:16:36

Objective-C 語法 函數

2011-05-11 15:45:50

內存管理Objective-C

2011-05-11 14:06:49

Objective-C

2011-05-11 13:54:08

Objective-C

2011-08-17 10:58:59

Objective-C構造函數

2011-07-08 13:49:46

Objective-C UUID

2012-06-15 09:47:48

Objective-CCategory

2011-08-03 16:55:05

Objective-C 代理

2011-08-04 09:35:09

Objective-C 編碼規范
點贊
收藏

51CTO技術棧公眾號

国产ts一区二区| 亚洲自拍偷拍一区二区三区| 神马电影网我不卡| 欧美日韩国产色视频| www.亚洲天堂网| 成人av高清在线| 7777在线视频| 美女在线一区| 国产精品中文字幕一区二区三区| 欧美一卡2卡3卡4卡无卡免费观看水多多 | 香蕉视频亚洲一级| 精品国产伦理网| 色在线视频网| 精品成人免费观看| 91丝袜在线| 精品亚洲一区二区三区| 91av久久| 在线播放国产一区中文字幕剧情欧美| 麻豆视频在线看| 亚洲欧美日韩区| 欧美日本国产一区| 韩国精品一区二区| 国精产品一区二区| 夜夜精品视频| 免费av在线一区二区| 亚洲第一毛片| 日本午夜精品一区二区三区| 欧美亚洲一级| 日韩视频专区| 精品一区二区三区蜜桃| 国内外成人激情免费视频| 丝袜a∨在线一区二区三区不卡| 国外av网站| 成人免费视频77777| 成人永久aaa| av五月天在线| 亚洲国产另类精品专区| 日韩有码电影| 欧美一区二区大片| 日韩高清中文字幕一区二区| 欧美成人精品xxx| 精品毛片免费观看| 久久黄色影视| 日本午夜人人精品| 中文字幕亚洲综合久久五月天色无吗'' | 亚洲精品成人精品456| 中文av在线播放| 欧美日韩国产区一| 国产电影一区二区三区爱妃记| 欧美片一区二区三区| 91视频精品| 欧美精品中文字幕一区二区| 成人性生交大片免费 | 亚洲国产精品精华液2区45| 中文字幕免费在线视频| 亚洲精品一区二区三区在线观看| 国产精久久一区二区| 日本视频久久久| 亚洲美洲欧洲综合国产一区| 性高湖久久久久久久久aaaaa| 亚洲男人天堂一区| 欧美aaa免费| 8x海外华人永久免费日韩内陆视频| 欧美国产三级| 僵尸世界大战2 在线播放| 青青草国产免费一区二区下载| 国产精品日韩一区二区免费视频| 日韩av二区在线播放| 国产成人精品视频ⅴa片软件竹菊| 色综合久久中文字幕| 亚洲综合资源| 加勒比在线一区二区三区观看 | 国产资源第一页| 一区二区三区不卡视频在线观看| 亚洲一区二区免费视频软件合集| 久久免费国产精品| 亚洲1卡2卡3卡4卡乱码精品| 色婷婷久久一区二区| 国自产拍偷拍福利精品免费一| 黄色影院一级片| 欧美高清www午色夜在线视频| 亚洲精品高潮| 久久影院理伦片| 国产精品久久久久久妇女6080| 成人在线视频亚洲| 亚洲国产一区二区a毛片| v片在线观看| 国产精品1区2区在线观看 | 亚洲精品欧美在线| 三妻四妾的电影电视剧在线观看 | 日本成人三级电影网站| 亚洲欧美日韩久久精品| 偷拍自拍在线看| 国产视频一区二区三区四区| 日韩一区欧美一区| jizzyou欧美16| 欧美一级片免费观看| 亚洲成人精品一区二区| 欧美三级一区| 999久久欧美人妻一区二区| 欧美三级电影网站| 欧美精品色图| av五月天在线| 在线精品高清中文字幕| 日韩av成人高清| 成年人在线观看网站| 国产精品a久久久久久| 久久久久综合网| 欧美xxxxxx| 亚洲精品欧洲精品| 欧美日韩一级黄| 色狮一区二区三区四区视频| 国产性生交xxxxx免费| 正在播放亚洲1区| 捆绑调教美女网站视频一区| 亚洲永久精品国产| 国产中文一区二区| 亚洲精品少妇30p| 欧美aaa大片视频一二区| 欧美极品日韩| 91黄色免费网站| 91麻豆国产自产在线观看亚洲| jizz18女人| 欧美国产日韩一区二区在线观看| 国产一区二三区| 国产不卡人人| 中文字幕一区二区三区四区五区人 | baoyu777.永久免费视频| 久久夜色撩人精品| 久久久精品中文字幕麻豆发布| 日韩黄色在线| 日韩av黄色网址| 欧美精品免费播放| 欧美韩日一区二区三区四区| 成人性生交大片免费看96| 免费看污黄网站| 国产aaa精品| 日韩欧美在线视频日韩欧美在线视频| 99国产精品一区二区| yiren22综合网成人| 欧美精品久久久| 亚洲免费精彩视频| 91麻豆视频网站| 欧美色图五月天| 在线视频2区| 国产欧美一区二区视频| 精品粉嫩超白一线天av| 国产成人一区在线| 国产在线播放精品| 国内av免费| 国产 高清 精品 在线 a| 欧美一区二区美女| 丰满少妇久久久久久久| 大陆精大陆国产国语精品| 最新av在线网站| 欧美高清视频一区| 中文字幕在线日韩| 亚洲综合色区另类av| 国产精品综合色区在线观看| 欧美www.| 男女羞羞电影免费观看| 91入口在线观看| 亚洲乱码一区二区| 国产精品乱码人人做人人爱| 中文无码久久精品| 国产欧美一区二区三区精品酒店| 亚洲高清在线免费观看| 成人久久久久久| 国产婷婷成人久久av免费高清 | 久久久亚洲国产精品| 69国产精品成人在线播放| 色94色欧美sute亚洲13| 九九**精品视频免费播放| av不卡一区二区| 69久久夜色| 1024av视频| av资源站久久亚洲| 亚洲新声在线观看| 亚洲国产精品尤物yw在线观看| 视频在线观看一区| 国产精品任我爽爆在线播放| 成人高潮成人免费观看| 欧美亚洲国产成人| 国产伦精品一区二区三区四区视频| 一本色道久久综合亚洲精品小说 | 无码人妻丰满熟妇区毛片18| 91麻豆国产语对白在线观看| 亚洲人av在线影院| 亚洲aaa精品| 9色porny自拍视频一区二区| 中文不卡在线| 日韩在线成人| 2018av在线| 欧美一区二区少妇| 苍井空浴缸大战猛男120分钟| 国产91aaa| 99久久伊人精品影院| 18欧美乱大交hd1984| 亚洲激情女人| 国模大尺度视频一区二区|