objective-c 协议(Protocol)和代理(Delegate)
2014-01-01 11:51
363 查看
协议的基本概念
协议的声明看起来比较类似一个类的接口,不同的是协议没有父类也不能定义实例变量。协议是一种特殊的程序设计结构,用于声明专门被别的类实现的方法,协议在以下场合非常有用:
需要由别的类实现的方法
声明未知类的接口
两个类之间的通信
协议的基本特点
协议可以被任何类实现的方法
协议本身不是类,它使定义了一个其他类可实现的接口
类目也可以采用协议
协议中的关键字
@required:表示必须强制实现的方法
@optional:表示可以有选择性的方法
代理设计模式的基本概念
通俗来讲,代理就让别人替自己完成一件事情
代理是指一个对象提供机会对另一个对象中的行为发生变化时做出的反应。
代理设计模式的基本思想——两个对象协调解决问题,通常用于对象之间的通信。
代理设计模式的基本特点
简化了对象的行为,最小化了对象之间的耦合度
使用代理,一般来说无需子类化
简化了我们应用程序开发,既容易实现,又灵活
示例代码:
夏目现在想买一台mac,可是她现在有事情,不能去经销商那里购买,所以让经销商帮他找看看还有mac的存货没
FindComputer.h
Person.h
Person.m
Dealer.h
Dealer.m
main.m
协议的声明看起来比较类似一个类的接口,不同的是协议没有父类也不能定义实例变量。协议是一种特殊的程序设计结构,用于声明专门被别的类实现的方法,协议在以下场合非常有用:
需要由别的类实现的方法
声明未知类的接口
两个类之间的通信
协议的基本特点
协议可以被任何类实现的方法
协议本身不是类,它使定义了一个其他类可实现的接口
类目也可以采用协议
协议中的关键字
@required:表示必须强制实现的方法
@optional:表示可以有选择性的方法
代理设计模式的基本概念
通俗来讲,代理就让别人替自己完成一件事情
代理是指一个对象提供机会对另一个对象中的行为发生变化时做出的反应。
代理设计模式的基本思想——两个对象协调解决问题,通常用于对象之间的通信。
代理设计模式的基本特点
简化了对象的行为,最小化了对象之间的耦合度
使用代理,一般来说无需子类化
简化了我们应用程序开发,既容易实现,又灵活
示例代码:
夏目现在想买一台mac,可是她现在有事情,不能去经销商那里购买,所以让经销商帮他找看看还有mac的存货没
FindComputer.h
#import <Foundation/Foundation.h> @protocol FindComputer <NSObject> -(void)findcomputer; @end
Person.h
#import <Foundation/Foundation.h> #import "FindComputer.h" @interface Person : NSObject @property(nonatomic,assign)id<FindComputer>newdelegate;//此处声明一个代理,从而Person可以让代理人完成需要代理的事情 @property(nonatomic,copy)NSString *name; -(id)initWithName:(NSString *)name withDelegate:(id)delegate;//传入代理 -(void)wantbuyMac;//被代理的事情 @end
Person.m
#import "Person.h" @implementation Person -(id)initWithName:(NSString *)name withDelegate:(id)delegate{ if (self = [super init]) { _name = name; _newdelegate = delegate; } return self; } -(void)wantbuyMac{ [_newdelegate findcomputer]; } @end
Dealer.h
#import <Foundation/Foundation.h> #import "FindComputer.h" @interface Dealer : NSObject<FindComputer> @end
Dealer.m
#import "Dealer.h" @implementation Dealer -(void)findcomputer{ NSLog(@"找见了你需要的mac"); } @end
main.m
#import <Foundation/Foundation.h> #import "Person.h" #import "Dealer.h" int main(int argc, const char * argv[]) { @autoreleasepool { // insert code here... NSLog(@"Hello, World!"); Dealer *dealer = [[Dealer alloc]init]; Person *person = [[Person alloc]initWithName:@"夏目" withDelegate:dealer]; [person wantbuyMac]; } return 0; }
相关文章推荐
- iOS 开发-Objective-c基础:协议和代理delegate&protocol)
- 【初学】Objective-C学习笔记-委托代理(delegate)和协议(protocol)
- Objective-C ,ios,iphone开发基础:protocol 协议(委托,代理)的声明
- Objective-C关于协议protocol与代理degelate以及protocol的类型限制
- Protocol and Delegate协议和代理
- protocol 和delegate(协议和代理)的区别
- protocol(协议) 和 delegate(委托)也叫(代理)---辨析
- iOS开发之Protocol (协议) 和delegate(代理)
- Objective-C协议(protocol)和委托(delegate)的基本概念(★firecat推荐★)
- Objective-C 中protocol(协议)及delegate(委托、代理)
- 协议protocol和代理delegate的使用
- Protocol 协议 与 delegate 代理
- 【IOS沉思录】IOS中的协议Protocol与代理Delegate
- Objective-C协议(protocol)和委托(delegate)的基本概念
- 浅谈iOS开发的协议(protocol)和代理(delegate)
- [置顶] Objective-C ,ios,iphone开发基础:protocol 协议(委托,代理)的声明
- Objective-C——协议(Protocol)详解与代理(委托)设计模式
- iOS开发之OC篇(13)—— Protocol(协议)、Delegate(代理)
- Protocol and Delegate 协议和代理(设计模式之代理模式)
- iOS中的协议(Protocol)与代理(Delegate)