同名異式
動態型別
動態連結
其實這三個觀念都環繞著一個特殊的資料型態 "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
沒有留言:
張貼留言