/* syntax highlight */ /* end of syntax highlight */

2010年11月24日 星期三

iphone app 開發 (八) – 從 C 進入 Objective C

Bookmark and Share

image

在談這個題目之前,讀者最好已經具備一些 C 的基本觀念

不然接下來的部份可能會較困難。

 

 

C  與 Objective C 相同之處

 

(1) 註解:一樣是 // 與 /* */

(2) 條件判斷:一樣是 if {} else if {} else {}

(3) 條件判斷:一樣是 switch(i) { case ‘A’: xxx …}

(4) 迴圈控制:一樣是 for (int i =0; i<100;i++)

(5) 迴圈控制:一樣是 do{ xxx } while ():

(6) 前置處理:一樣是 #include

(7) 前置處理:一樣是 #define

 

 

C  與 Objective C 相異之處

 

(1) 方法與函數之宣告

C語言

int getAge (char *name){

}

 

Objective C 語言:

- (int) age:(NSSTring *)name{

}

 

(2) id 任意資料類型:

Objective C 發明了 id 這個可以代表任何的資料型態

 

(3) 訊息傳遞

Objective-C 物件導向最大的特色是的訊息傳遞(message passing)模型。Objective-C 裡,物件不呼叫方法,而是互相傳遞訊息

 

(4) 布林值

C 裡面雖然沒有布林的資料型態,但是以 0 表示 false, 1代表非 false。而 Objective-C 則是以 BOOL 資料類型,然後只有 YES 和 NO 兩種數值類型。

 

(5) 空值

C 與 C++ 是用 NULL 表示空值,但 Objective-C 則是用 nil 表示空值。

 

(6) 介面與實現之切割

Objective-C 會強迫將類別的程式碼的介面 (Interface) 與實現 (Implementation) 分開,通常 class 的介面會放置於標頭檔內,依C語言的慣例以.h作為副檔名; class 的實現則放於代碼檔,以.m為副檔名。

 

介面 (Interface) 的範例如下 (from wiki)

  1. @interface MyObject : NSObject {
  2.     int memberVar1; // 實體變數
  3.      id  memberVar2;
  4. }
  5. +(return_type) class_method;            // 類方法
  6.  
  7. -(return_type) instance_method1;        // 實體方法
  8. -(return_type) instance_method2: (int) p1;
  9. -(return_type) instance_method3: (int) p1 andPar: (int) p2;
  10. @end

 

其中, +/- 號代表的是方法的類型, (+) 對應的是 C++ 裡面的靜態函數 (Static member function) ,(-) 指的則是一般的實體方法 (instance method),為了避免讀者看不懂, Wiki 那邊還放了意義相同之對照著看的 code,較容易進入狀況

  1. class MyObject : public NSObject {
  2.     int memberVar1;  // 實體變數
  3.     void * memberVar2;
  4.  
  5.   public:
  6.     static return_type class_method(); // 類方法
  7.  
  8.     return_type instance_method1();    // 實體方法
  9.     return_type instance_method2( int p1 );
  10.     return_type instance_method3( int p1, int p2 );
  11. }

其實應該還有很多不同的地方,這些部份我們之後再談

 

參考資料:

Objective-C beginer’s guilde

Objective-C 維基百科

C++ Versus Objective-C

0 意見:

張貼留言

Related Posts Plugin for WordPress, Blogger...