OC——委托模式

来源:互联网 发布:设计ui的软件 编辑:程序博客网 时间:2024/05/19 12:25

协议与数据类型。

我们可以在使用的数据类型中为实例变量和方法参数指定协议名称。这样,可以给Objective-c的编译器提供更多的信息,从而有助于检查我们的代码的错误。

id类型表示一个可以指向任何类型的对象的指针,它是一个泛型对象类型。我们可以将任何对象赋值给一个id类型的变量。也可以将一个id类型的变量赋值给任何类型的对象指针。如果一个用尖括号括起来的协议名称跟随在id之后,编译器就会知道我们期望任意类型的对象,只要遵守该协议。


 id类型的对象可以加协议限制。

表示该对象必须遵守指定的协议。

例如:id <  NSCopying>obj;


委托是一种常用的设计模式。是两个类之间的关系。

在cocoa中的类,经常使用一种名为委托(delegate)的技术,委托是一个类的对象会要求委托对象执行它的某些操作。

委托的操作步骤:

1实现雇主类

 2完成委托协议 

 3实现代理类

 4建立委托关系。


例:


雇主类:

#import <Foundation/Foundation.h>

#import "Question.h"

@interface Student :NSObject

{

   id<Question> delegate;

}

@property (assign)id <Question> delegate;

-(void)askQuestion;

@end


#import "Student.h"


@implementation Student

@synthesize delegate;

-(void)askQuestion

{

    NSLog(@"ask question by student……");

    [delegate answerQuestion];//调用teacher中类的方法。

}


@end


委托协议

#import <Foundation/Foundation.h>


@protocol Question <NSObject>

-(void)answerQuestion;

@end


代理类

#import <Foundation/Foundation.h>

#import "Question.h"

@interface Teacher :NSObject  <Question>//采用协议

@end


#import "Teacher.h"


@implementation Teacher

-(void)answerQuestion//实现协议中的方法。

{

    NSLog(@"answer queston by teacher……");

}


@end




#import <Foundation/Foundation.h>

#import "Student.h"

#import "Teacher.h"

#import "Question.h"


int main(int argc,constchar * argv[])

{


    @autoreleasepool {

      

        Teacher *teacher=[Teacher new];

        Student *student=[Student new];

        

        student.delegate=teacher;//建立委托关系。

        [student askQuestion];

        

        [teacher release];

        [student release];

        

        

    }

    return 0;

}