1. 程式人生 > >游泳健身瞭解一下,object-c也瞭解一下

游泳健身瞭解一下,object-c也瞭解一下

       本文談不上技術文章,只是前幾天看了object-c語法,其實oc語法此前看過一次,不過紙上得來終覺淺,看過後沒怎麼實踐,後來也就忘得差不多了。這次又看了一下,然後隨便寫幾句吧。如果單純有java基礎,看oc會覺得有好多彎要轉。如果有c/c++基礎,看oc會稍微好一些,畢竟oc是c的超集,屬於c大本營內一員,當然,在這個大本營,oc是自成一派的。我想因為是c大本營的語言,所以ios系統可以做到不用安裝記憶體整理工具,就可以長時間不重啟手機,系統用起來還是很流暢,而java陣營的android就不行,手機用時間久了就會覺得卡。所謂自成一派,其實感覺oc很多設計是為了不同而不同,比如類的定義oc放著class不用,非得用interface,然後介面定義是protocol了。如果習慣了點運算子,比如obj.print(),在oc中著實需要轉換一下思路,oc中點運算相當於呼叫屬性的get/set方法,並且僅限於呼叫set/get方法,感覺好浪費,如果呼叫例項方法,需要[obj print]才行,因此oc程式中,包含大量的中括號。當然也包含很多加/減號,這裡加減號除了作為算數運算子,還有了新的用途,那就是標識類方法和例項方法。使用加號修飾,表示該方法為類方法,使用減號修飾,表示該方法為例項方法。另外,前面說方法呼叫,其實是不準確的,oc中沒有方法呼叫一說,叫給物件傳送一個訊息。像c++,執行時所執行的程式碼由編譯器決定,如果程式碼中呼叫的函式是多型的,那麼執行時就要按照編譯器生成的虛擬函式表進行查詢到底該執行哪個函式的實現;而oc,其執行時所執行的程式碼由執行環境決定,不論是否多型,總是在執行時才去查詢所要執行的方法,實際上編譯器甚至不關心接收訊息的物件是何種型別。但一說到發訊息、收訊息,腦子裡面總會想到mfc的訊息對映機制,經典的sendMessage()和postMessage(),或者android裡的handler發訊息,腦子裡面想的這才是發訊息--響應訊息。而oc中貌似你不知道訊息傳送者和接受者是誰,有點傻傻分不清,這一點剛開始學時還是有點繞的。我想這樣的設計主要是為了語言的多型,或者說動態特性。但實際應用中很多時候並不是那麼動態的,比如一個ui控制元件,調整下背景顏色、字型大小什麼的,都是一對一的呼叫。而動態的地方都是少數的,偏底層的,否則程式設計的地方處處都是動態,那程式設計這活就太難幹了。 oc中的category特性挺有意思,不過還是有點像c++中一個頭檔案加多個實現檔案,大家只要共同包含一個頭檔案就行了,但是要比這個強大。category主要是方便類的擴充,甚至可以擴充系統的類庫。但是要注意命名,否則一不小心重寫了系統類的方法,那就坑大了。另外,oc中block感覺就是c++中的函式指標,或者是java中的匿名內部類,當然不同點肯定有很多,主要是這麼一想,就覺得沒什麼神祕的了。

       由於oc程式碼寫的不多,理解比較淺顯,所以上面說的有些可能是片面的和錯誤的。歡迎大家指正。