《Objective-C基礎教程》第13章 協議

第13章 協議

13.1 正式協議

與非正式協議一樣,正式協議包含了方法和屬性的有名稱列表。
不同的是,正式協議要求顯式地採用(在@interface聲明中列出協議的名稱)
採用協議之後,類就要遵守該協議,實現該協議的所有方法

13.1.1 聲明協議

@protocol NSCopying
  -(id) copyWithZone:(NSZone *) zone;
@end

繼承父協議

@protocol MySuperDuberProtocol <MyparentProtocol>
-(void)....//需要實現的方法
@end

通常可以使用NSObject作爲根協議(不要將其與NSObject類混淆)NSObject類複合NSObject協議,這意味着所有的對象都符合NSObject協議

13.1.2 採用協議

@interface Car:NSObject<NSCopying,NSCoding>
{
// instance variables
}
//methods
@end //Car

13.2 協議和數據類型

可以在數據類型中爲實例變量和方法參數制定協議名稱,有助於檢查代碼中的錯誤。

-(void)setObjectValue:(id<NSCopying>)object;

編譯器將知道setObjectValue:接受任意類型的對象作爲參數,但前提是要遵守該協議。否則會發生告警。

13.3 Objective-C 2.0 的新特性

@optional
-(void)...//不一定要實現
@required
-(void)...//一定要實現

非正式協議已經被替換成帶有@optional方法的正式協議。

13.4 委託方法

委託(delegation)是一個經常與協議共用的特性。委託就是某個對象指定另一個對象處理某些特定任務的設計模式。

使用委託來執行相應方法時,代碼首先詢問委託是否擁有這個方法的實現,如果實現了,它就會要求委託處理這個方法。

示例
A.h
@protocol Mydelegate//協議的聲明
-(void)Fun;
@end

@interface A:NSObject
{
   id<Mydelegate> delegate;//聲明一個委託對象,我們要把事情委託給實現Mydelegate協議的類
}
@property(assign,nonatomic) id<Mydelegate> delegate;
@end
A.m
@implementation
-(void)init
{
    delegate = B;
}

-(void)FunToOther
{
    [delegate Fun];//將消息發送給委託去處理
}
@end
委託對象的實現
B.h
#import"A.h"
@interface B:NSObject<MyDelegate>
@end
B.m
@implementation
-(void)fun
{
    //實現Mydelegate中制定的方法
}
@end
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章