ios Objective-cダイナミックエージェント
エージェントの原理
エージェント自身のクラスの参照を取得し、
自分が呼び出す方法を実現させ、
このクラスの参照によって実装されたメソッドを呼び出す(コンパイラ自身がメソッドセレクタを実行する)
プロキシ宣言フォーマット
@protocol TestDelegate <NSObject>
-(void) logStr:(NSString *) str;
///
@end
プロキシの使用
@interface XMRotationChartView : UIView
/// ,
@property (nonatomic, assign) id <XMRotationChartViewDelegate> delegate;
@end
@implementation XMRotationChartView
-(void) test{
[self.delegate logStr:@"Hello"];
}
エージェントメソッドの使用例
///
[self addObserver:self forKeyPath:@"delegate" options:NSKeyValueObservingOptionNew context:nil];
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context{
///
if ([@"delegate"isEqualToString:keyPath]) {
if (_delegate != nil) {
NSlog(@" ");
[self.delegate logStr:@"Hello"];
}else{
NSlog(@" ");
}
}
}