IOS开发——Protocol使用协议-阿里云开发者社区

开发者社区> eddie小英俊> 正文

IOS开发——Protocol使用协议

简介:
+关注继续查看
protocol ['prəutəkɔl] (样例:http://blog.sina.com.cn/s/blog_6aafe9c90100yozz.html )
一、说明
 
两个类进行通讯,用协议就比較方便。 

1.协议声明了能够被不论什么类实现的方法 
2.协议不是类,它是定义了一个其它对象能够实现的接口 
3.假设在某个类中实现了协议中的某个方法,也就是这个类实现了那个协议。 
4.协议经经常使用来实现托付对象。一个托付对象是一种用来协同或者代表其它对象的特殊对象。 
5:托付,就是调用自定义方法,别的类来实现。 
6.新特性说明 
@optional预编译指令:表示能够选择实现的方法 
@required预编译指令:表示必须强制实现的方法 


二、定义 
.h 
@protocol ContactCtrlDelegate 
-(void)DismissContactsCtrl; 
@end 


@interface ContactsCtrl : UIViewController { 
    id <ContactCtrlDelegate> delegate; 
} 
@property (nonatomic, assign) id <ContactCtrlDelegate> delegate; 
.m 
@synthesize delegate; 

三、样例 

比如:UITextView 

@protocol UITextViewDelegate <NSObject> 
@optional 
- (BOOL)textViewShouldBeginEditing:(UITextView *)textView; 
- (BOOL)textViewShouldEndEditing:(UITextView *)textView; 
- (void)textViewDidBeginEditing:(UITextView *)textView; 
- (void)textViewDidEndEditing:(UITextView *)textView; 
- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text; 
- (void)textViewDidChange:(UITextView *)textView; 
- (void)textViewDidChangeSelection:(UITextView *)textView; 
@end
假设要调用以上这些方法。就必须设置UITextView的托付:TextView.delegate = self; 


四、Demo 
1、ContactsCtrl.h 
#import <UIKit/UIKit.h> 

//定义协议 
@protocol ContactCtrlDelegate 
-(void)DismissContactsCtrl; 
@end 

@interface ContactsCtrl : UIViewController { 
    IBOutlet UINavigationBar *ContactNavBar; 
    id <ContactCtrlDelegate> delegate; 
} 
@property (nonatomic, assign) id <ContactCtrlDelegate> delegate; 
-(IBAction)canCelBtn:(id)sender; 
@end 
2、ContactsCtrl.m 
@implementation ContactsCtrl 
@synthesize delegate; 

// Implement viewDidLoad to do additional setup after loading the view, typically from a nib. 
- (void)viewDidLoad { 
    [super viewDidLoad]; 
    ContactNavBar.topItem.prompt = @"选取联系人发送短信"; 
} 

//调用协议中的方法 
-(IBAction)canCelBtn:(id)sender{ 
    [delegate DismissContactsCtrl]; 
} 

3、ProtocolDemoCtrl.h 

#import <UIKit/UIKit.h> 
#import "ContactsCtrl.h" 
@interface ProtocolDemoCtrl : UIViewController <ContactCtrlDelegate>{//加入托付 
    ContactsCtrl *contactsView; 
} 

4、ProtocolDemoCtrl.m 

#import "ProtocolDemoCtrl.h" 
#define BARBUTTONADD(SELECTOR) [[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:self action:SELECTOR] autorelease]; 

@implementation ProtocolDemoCtrl 
@synthesize contactsView; 

// Implement viewDidLoad to do additional setup after loading the view, typically from a nib. 
- (void)viewDidLoad { 
    [super viewDidLoad]; 
    self.navigationItem.rightBarButtonItem = BARBUTTONADD(@selector(addContactAction:)); 
} 

- (void)addContactAction:(id)sender{ 
    ContactsCtrl *contactView = [[ContactsCtrl alloc] initWithNibName:@"ContactsCtrl" bundle:nil]; 
    self.contactsView = contactView; 
    contactsView.delegate = self;//设置托付 
    [self presentModalViewController:contactsView animated:YES]; 
    [contactView release];     
} 

//实现ContactCtrlDelegate协议中的方法 
-(void)DismissContactsCtrl{ 
    [contactsView dismissModalViewControllerAnimated:YES]; 
} 

综上,假设A类.h文件定义了一个协议,在A类里面我们还须要定义一个托付delegate,协议里面有个必须实现的methodA方法(@required,这种方法在实现了协议的类里面实现),在A类的.m文件里须要调用这个methodA方法,我们使用托付调用这个methodA方法

[delegate DismissContactsCtrl]; 
类B实现了这个协议,在.h文件里定义类A的对象a,在.m文件里须要实现methodA方法。而且须要设置托付

a.delegate = self;//设置托付

假设MethodA返回的是B类的对象,那么在A类中就能够调用B类属性和方法国,B这个类可以调用A的属性和方法。


版权声明:本文博客原创文章。博客,未经同意,不得转载。





本文转自mfrbuaa博客园博客,原文链接:http://www.cnblogs.com/mfrbuaa/p/4657138.html,如需转载请自行联系原作者


版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
IOT设备通讯协议MQTT
哈喽大家好呀!笔者的公司最近在做IOT设备相关的业务,基于这个契机寻找学习了一下关于IOT通讯协议相关的内容,最终在技术选型上选择了使用MQTT协议并且结合EMQ上层MQTT中间件实现提供链接服务,那么本轮博文就和大家来一起探讨学习有关IOT设备的相关特性和MQTT协议的本质.
1913 0
kafka-Java-SpringBoot-product API开发
前面讨论过如何安装kafka集群群及优化配置的问题,现在需要使用kafka集群,由于我们项目使用的是SpingBoot,故做一个inject到IOC容器的kafka-Java-SpringBoot-API,废话补多少,直接上代码:第一步,制定初始化类属性内容,最好赋初值,这样在使用的时候就不需要进行判空类:ProducerConfiguration import org.
1772 0
【阿里云IoT+YF3300】10.快速开发188协议设备驱动
188协议的全称为CJ-T188-2004 《户用计量仪表数据传输技术条件》,是针对水表、燃气表、热量表和其他集中采集的一个国家行业标准协议。
775 0
dzq
即时通讯(im)框架/系统开发思考(1)-通讯协议选型
文章分析了XMPP,MQTT,WebSocket,socket.io 各种协议的优缺点,最终选择了socket.io 作为即时通讯的通讯手段。
1459 0
纯键盘开发实战(Mouseless Programming)
作为一个践行Mouseless Programming的开发者,来谈谈自己在日常工作中是如何做到「几乎」不用鼠标的。 在说具体的「技巧」之前,先聊一聊纯键盘开发的几个原则: 1. **动机**, 动机要单纯,纯键盘开发不是为了耍酷, 你的动机应该是提高「效率」:) 2. **键盘只是工具,思想才是关键**, 代码和问题先想清楚再下手,想清楚远比写的快重要! 3. **键盘不要经
1775 0
RAPIDIO高速串行协议
<div class="para" style="color: rgb(51, 51, 51); margin: 15px 0px 5px; text-indent: 2em; line-height: 24px; font-family: arial, 宋体, sans-serif; font-size: 14px;">RapidIO是由Motorola和Mercury等公司率先倡导的一种高
2080 0
使用IoT Studio经济高效地完成物联网应用开发(含DEMO)
IoT Studio原Link Develop,是阿里云整合在应用开发领域的丰富经验倾力打造的一站式、低成本、高稳定、易定制的物联网生产力工具,旨在帮助用户经济高效的完成物联网应用开发。
11791 0
925
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载