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、声明代理的指向,在实现方法的类里面。

 

posted @ 2012-07-05 21:24  worldworld  阅读(153)  评论(0编辑  收藏  举报