OC——委托模式

协议与数据类型。

我们可以在使用的数据类型中为实例变量和方法参数指定协议名称。这样,可以给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;

}








评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值