2012年4月25日 星期三

Objective C 學習隨記(二)

objC 跟C 雖然是很類似的程式語言, 但是用慣了C 寫一些firmware的人要轉學objC 還是有一些觀念要適應一下! 下面介紹的就是一個objC專有的語法, 如果能靈活運用, 將省去不少重複的程式

同名異式

動態型別

動態連結

其實這三個觀念都環繞著一個特殊的資料型態 "id"

最根本的原因是objC裡, object type並不是在compiling type決定,而是在runtime決定

一個以id 宣告為type的物件, 它的type內容是可變的
例如


id mathobj;

Fraction *aFrac = [Fraction alloc] init];

Complex *bComp = [[Complex alloc] init];
mathobj = aFrac;
[mathobj print];
mathobj = bComp;
[mathobj print];

因為有繼承這個objC主要功能的關係, 很多物件都相互有同名的method, 當然內容可能各不一樣, 就可以用id這種型態, 動態呼叫不同的物件同名method

這部分又衍生一些檢查的功能
例如檢查這個class 的selector (method) 是否存在
selector是以SEL為type的物件
運用方法如下例

SEL action;
id graphicobject
...
action = @selector(draw)
...
[graphicobject performSelector: action];

也就是說selector可以動態選擇要執行的method


Try & Catch 例外處理

objC的exception 處理方式:
把有可能發生exception的程式段以
@try{
...
}
包起來

後面在撰寫處理程序
@catch(NSException exception){
...
}

@finally 是不管有沒有丟出exception都會執行的程式區

@throw可以自己丟出exception


沒有留言:

張貼留言