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(@" ");
		}
      	
    }
    
}