委託代理(degegate),顧名思義,把某個對象要做的事情委託給別的對象去做。那麼別的對象就是這個對象的代理,代替它來打理要做的事。
委託機制是一種設計模式,在很多語言中都用到的,這只是個通用的思想,網上會有很多關於這方面的介紹。
那麼在蘋果開發過程中,用到委託的程序實現思想如下,我主要拿如何在視圖之間傳輸信息做個例子。
譬如:在兩個頁面(UIIview視圖對象)實現傳值,用委託(delegate)可以很好做到!
方法:
類A
@interface A:UIView
id transparendValueDelegate;
@property(nomatic, retain) id transparendValueDelegate;
@end
@implemtion A
@synthesize transparendValueDelegate
-(void)Function
{
NSString* value = @"hello";
//讓代理對象執行transparendValue動作
[transparendValueDelegate transparendValue: value];
}
@end
類B
@interface B:UIView
NSString* value;
@end
@implemtion B
-(void)transparendValue:(NSString*)fromValue
{
value = fromValue;
NSLog(@"the value is %@ ",value);
}
@end
//下面的設置A代理委託對象爲B
//在定義A和B類對象處:
A* a = [[A alloc] init];
B* b = [[B alloc] init];
a. transparendValueDelegate = b;//設置對象a代理爲對象b
這樣在視圖A和B之間可以通過委託來傳值!
下面這個例子委託有兩類:
1、一個視圖類對象的代理對象爲父視圖,子視圖用代理實現讓父視圖顯示別的子視圖
2、同一父視圖下的一個子視圖爲另一個子視圖的代理對象,讓另一個子視圖改變自身背景色爲給定的顏色
===============================================
規範格式如下:
@protocol TransparendValueDelegate;
@interface A:UIView
id< TransparendValueDelegate > m_dTransparendValueDelegate;
@property(nomatic, retain) id m_dTransparendValueDelegate;
@end
//代理協議的聲明
@protocol TransparendValueDelegat<NSObject>
{
-(void)transparendValue:(NSString*)fromValue;
}