delegate的使用总结
需要在A类中修改B类的方法
ClassA.h
@protocol ClassADelegate //在类A中声明并且定义一个代理
-(void)ChangeObjectFromClassB;
@end
@interface ClassA: NSObject {
id<ClassADelegate> delegate;
}
@property (nonatomic,assign) id <ClassADelegate> delegate;
@end
ClassA.m
@implementation ClassA
@synthesize delegate;
...do something
-(void)method
{
//do something
//在类A中主动调用代理方法(方法在类B中重写)
[self.delegate ChangeObjectFromClassB];
}
@end
--------------------------------------------------------------
ClassB.h
@Interface ClassB:NSObject <ClassADelegate> { //遵守类A的协议
}
@end
ClassB.m
#import ClassA
@implementation ClassB
...do something
-(void)method
{ //生成类A的实例,并将类B代理给A
ClassA *objA = [[ClassA alloc] init];
objA.delegate = self;
}
//在B类中重写该代理函数
-(void)ChangeObjectFromClassB
{
//do something
}
1、谁遵循协议,就在谁里面实现方法,如class B
2、谁需要代理,就在谁里面声明代理 如class A
3、在需要完成功能的地方用代理调用该方法
4、声明代理的指向,在实现方法的类里面。