objectc 代理协议通知KVO及MVC

来源:互联网 发布:extern c语言 编辑:程序博客网 时间:2024/06/07 17:23

协议,就是使用了这个协议后就要按照这个协议来办事,协议要求实现的方法就一定要实现。

委托(代理),顾名思义就是委托别人办事,就是当一件事情发生后,自己不处理,让别人来处理。

1.  同时用到协议及委托

有两个类,一个是控制器类,一个是view类

当用户操作view时,需要通知控制器,让控制器去处理一些逻辑时,需要用到委托及协议

 controller.h

#import "view.h"

@interface Controller:NSObject<TestDelegate>{

View* _view;

}

@end     

controller.m

@implement

-(void) viewDidLoad

{

   view =[ [View alloc] init];

  view.delegate = self;   //这里用到委托,意思就是View把事情交给Controller去处理。 体现出MVC的思想

}

// View 其实并没有实现testMethod1及testMethod2, 在这里实现

-(void) testMethod1

{

   //deal logic

}

-(void) testMethod2

{

 //deal logic

}

view.h

@protocol TestDelegate
-(void) testMethod1

-(void) testMethod2

@end


@interface View:NSObject{

id <TestDelegate> delegate;

}

view.m

#implement

// 处理view上的一些用户事件

-(void)OnAction1

{

[delegate testMethod1];

}

-(void)OnAction2

{

[delegate testMethod2];

}


@end



2. 单独用到协议

可以看一下NSObject类,这是所有objectc 类的基类,它实现了<NSObject>  协议

当有一个类NSString* str;

可以[str retain];

retain 就是NSObject协议里指定的一个方法,而并不是NSObject类的成员方法


我相信在NSObject类里有

-(id) retain

{

// some code

 return self;

}

 NSObject类会去实现这个方法,因为这个方法是NSObject协议里规定的。

学过C++的人 会有所体会这里的协议 有点像C++里的抽象类。这样是否会有助于理解?




原创粉丝点击