標籤:style blog color 使用 os io
<一>繼承和多態@class Complex 聲明類(同C++)子類函數成員 super 訪問父類 同C++類似1.通過繼承 在子類中添加新方法2.通過繼承 在子類中添加新成員3.通過繼承 實現多態(實現比較簡單,通過Id通用類型作為父類)4.重載5.抽象類別abstract作用:建立子類更容易;提供了處理所有派生子類的公用介面;抽象方法制定了標準協議,規範子類必須實現。6.通用類型id,編譯時間不會做類型檢查,在運行時才會動態綁定具體類型,指出錯誤。 靜態類型在編譯階段就會指出錯我,另外,可以提高程式的可讀性。7.處理動態類型若干方法mySquare是Square類的執行個體。[Square class] //從Square類獲得類對象[mySquare class] //從mySquare對象獲得其所屬類[obj1 class] == [obj2 class] //判定兩個對象是否屬於同一個類[mySquare is MemberOf: [Square class]] //判定mySquare是不是Square的執行個體@selector (alloc) //為alloc方法產生1個SEL類型的值[Square respondsTo @selcetor (alloc)] == YES //判斷Square類是否響應alloc類方法[Square instanceRespondToSelector: @selector(action)] //查看Square的執行個體是否響應action方法eg:if([Square instanceRespondToSelector: @selector(action)] == YES)[mySquare performSelector: @selector (action)] //應用action方法[Square isSubclassOfClass: [Rectangle class]] == YES //判斷Square是否為Rectangle子類<二>@try異常處理-(void)action{ ... if(數組越界) NSException *e = [NSException exceptionWithName:@"out of array" reason:@"address is invalid" userInfo: nil] @throw e;//拋出異常}@try{ [mySquare action];//嘗試執行mySquare action方法}@catch(NSException *exception){ //捕捉異常,也可以派生NSException子類,重新定義具體細節 NSLog(@"Caught %@%@", [exception name], [exception reason]);//產生異常的名稱和原因}@finally {//無論異常是否發生,都必須執行 <代碼塊>}<三>協議和分類分類可以擴充類的方法,無需建立子類,無需訪問類的原始碼,但是它會影響到子類。@interface Square (MathOps)-(void) print;//增加新方法,與協議預設不同,不強制實現@end協議是多個類共用的一個方法列表,與抽象類別的抽象方法類似,子類必須都要實現該方法。@protocal <NSCoding>//NSCoding協議-(void)copyWithZone;//預設是必須實現@optional //表示可選項,不強制該協議的使用者實現該函數print-(void) print;@required //表示必須實現cout-(void) cout;@@protocal <NSCopying>//NSCopying協議-(void)copy;@end@interface AddressBook: NSObject<NSCopying, NSCoding>//可以採用多個協議@interface Square (MathOps)<NSCopying, NSCoding>//分類也可以採用協議