April 22,2006 22:08

Cocoa學習日記(1) - Objective-C 的寫法規則

有關Cocoa的教材實在不多,只好到對岸跟Apple原廠看那厚厚的文件。不過老實說,Apple的文件超多的,看起來頗累(而且小弟資質太差,看半天還在Cocoa架構上打轉),所以最近先從對岸學基本的概念。

這邊的內容,只是為了輔助自己記憶而已,不保証內容是正確的唷!如果各位先進發現當中有錯誤的地方,還盼不吝賜教。

今天的課題是「Objective-C的寫法規則」。由於小弟以往都是寫C跟Java,因此底下將會以 Java (現在應該比較多人熟悉這個語言吧)來對應說明。
方法的呼叫:


Java


回傳值 物件.方法(參數1, 參數2 );

retVal = Object.method( para1, para2 );


Objective-C


回傳值 [物件 方法 :參數1 :參數2 ...];

retVal = [Object method :para1 :para2];


在這個例子中,我們可以看到Objective-C的寫作方式是利用[ ];將呼叫的方法包起。括號內:

第一個參數:物件名稱(或實例)
第二個參數:呼叫方法名稱
第三個參數(之後):傳入方法的參數。參數值之前以 : 開頭。

Objective-C 內的參數亦可以遞迴呼叫其它方法,將其回傳值當作參數丟進方法內。例如:


Java


retVal = Object.method( Obj2.method2(), para2 );


Objective-C


retVal = [Object method :[Obj2 method2] :para2];

介面的寫法:

看了幾篇文件,總感覺Objective-C的介面(interface)跟C的 header(.h) 檔的性質很像,基本上介面確實也是出現在 Objective-C 的 .h 檔內。

C


#include <stdio.h>;
#include <stdlib.h>;

class obj : superobject
{
int field1;
char field2;

public :
static void classMethod();
int instanceMethod( int a );
};


Objective-C


#import "class.h"

@interface obj : superobject
{
intValue field1;
charValue field2;
}
+ (void) classMethod;
- (intValue) instanceMethod :(intValue) a;
@end



在這裡,比較值得注意的是宣告物件方法時,前面冠上的 +、- 符號。
初看 Objective-C 的程式,這部份最讓人搞不清楚它的意義。在看過文件後,發現它的意義其實很單純:

+ = static 方法,亦即物件靜態方法,不需要創建實例即可呼叫的方法。
- = 實例方法,亦即必須要先創建出實例才可呼叫的方法。

而所有參數、回傳值的型別均以 ( ) 包起,如範例中的 (intValue)。

另外,寫過 C 程式的朋友們應該都知道當我們在撰寫 .h 檔時,通常都會用 #ifndef _uniqueName_ 跟 #define _uniqueName_ 來避免程式重覆 #include 相同 header 檔,造成編譯錯誤的狀況。這個問題在 Objective-C 內將不再是個問題,因為 Objective-C 的 #import 跟 Java 的 import 相同,會自動檢查該 header 檔是否已經被 import 過,而不會有重覆 import 的狀況發生。

實作的寫法:

實作就跟 C 語言內的 .c 一樣,是實作程式內容的部份。在 Objective-C 裡是以 .m 檔存放實作程式碼。

原則上,實作跟介面的寫作規則很類似,只是將 @interface 改為 @implementation,並為該物件所屬的方法填入處理的程式碼即可。此外,由於介面已將物件的繼承關係定義清楚,因此在撰寫實作程式碼時便不需再寫上繼承的關係。


Objective-C

#import "obj.h"

@implementation obj
{
//實例變數宣告;
}
+ (void) classMethod {
doSomething;
}
- (intValue) instanceMethod :(intValue) a {
return int_value;
}
@end

實作程式碼內的 method 參數定義必需與介面內所定義的相同,畢竟實作顧名思意即可得知它的目的就是要實作出介面所定義的各種方法。

好吧,今天就先寫到這邊囉。下課。

  • 您可能有興趣:

    [iPhone] iBear Money Free 移轉至 iBear Money 正式版教學
    flowyu 發表於樂多回應(1)引用(0)Mac習作簿編輯本文
    樂多分類:網路/3C切換閱讀版型 │昨日人次:0 │累計人次:22833
    贊助商廣告
     

    引用URL

    http://cgi.blog.roodo.com/trackback/1457515

    回應文章

    c 沒有class這個關鍵字,是c++的。請注意一下
    | 檢舉 | Posted by 時者 at December 8,2008 18:07