在实际开发中,协议的应用非常广泛,以下是实际应用的例子。

1、协议的定义:

myProtocolDelegate.h

//
// myProtocolDelegate.h
// zlwPlayerApplication
//
// Created by xjz on 2018/3/30.
// Copyright © 2018年 xujinzhong. All rights reserved.
// #import <Foundation/Foundation.h> // 协议定义
@protocol SampleProtocolDelegate <NSObject> @required
- (void) processCompleted; @end @interface myProtocolDelegate : NSObject
{
// Delegate to respond back
id <SampleProtocolDelegate> _delegate;
} @property (nonatomic,strong) id delegate; -(void)startSampleProcess; // Instance method @end

myProtocolDelegate.m

//
// myProtocolDelegate.m
// zlwPlayerApplication
//
// Created by xjz on 2018/3/30.
// Copyright © 2018年 xujinzhong. All rights reserved.
// #import "myProtocolDelegate.h" @implementation myProtocolDelegate -(void)startSampleProcess{
if ([self.delegate respondsToSelector:@selector(processCompleted)]) {
[self.delegate
processCompleted];
}

} @end

2、协议的调用和实现

ViewController.h

//
// ViewController.h
// zlwPlayerApplication
//
// Created by xjz on 2018/1/31.
// Copyright © 2018年 xujinzhong. All rights reserved.
// #import <UIKit/UIKit.h> @interface ViewController : UIViewController @end

ViewController.m

//
// ViewController.m
// zlwPlayerApplication
//
// Created by xjz on 2018/1/31.
// Copyright © 2018年 xujinzhong. All rights reserved.
// #import "ViewController.h"
#import "Masonry.h"
#import "ReactiveObjC.h"
#import "myProtocolDelegate.h" @interface ViewController ()<SampleProtocolDelegate> @property(nonatomic, strong) UIButton *btnDone;
@property(nonatomic, strong) UILabel *lableMsg; @end @implementation ViewController - (void)viewDidLoad {
[super viewDidLoad]; self.view.backgroundColor = [UIColor whiteColor]; myProtocolDelegate *myDelegate = [[myProtocolDelegate alloc] init];
myDelegate.
delegate = self; self.lableMsg.text = @"显示内容"; [[self.btnDone rac_signalForControlEvents:UIControlEventTouchDown] subscribeNext:^(__kindof UIControl * _Nullable x) {
[myDelegate startSampleProcess];
}];
} -(UIButton *)btnDone{
if (!_btnDone) {
_btnDone = [UIButton new];
_btnDone.backgroundColor = [UIColor grayColor];
_btnDone.layer.cornerRadius = .f;
_btnDone.layer.masksToBounds = YES;
[_btnDone setTitle:@"Done" forState:UIControlStateNormal];
[self.view addSubview:_btnDone]; [_btnDone mas_makeConstraints:^(MASConstraintMaker *make) {
make.center.equalTo(self.view);
make.width.offset();
make.height.offset();
}];
}
return _btnDone;
} -(UILabel *)lableMsg{
if (!_lableMsg) {
_lableMsg = [UILabel new];
_lableMsg.font = [UIFont systemFontOfSize:.f];
_lableMsg.textColor = [UIColor redColor];
_lableMsg.textAlignment = NSTextAlignmentCenter;
[self.view addSubview:_lableMsg]; [_lableMsg mas_makeConstraints:^(MASConstraintMaker *make) {
make.bottom.equalTo(self.btnDone.mas_top).offset(-);
make.centerX.equalTo(self.view);
make.width.equalTo(self.view);
make.height.offset();
}];
}
return _lableMsg;
} #pragma mark - Sample protocol delegate
-(void)processCompleted{
static NSInteger idx = ;
self.lableMsg.text = [NSString stringWithFormat:@"代理-%zi", idx++];
} @end

iOS - 协议实现的例子的更多相关文章

  1. JAVA基础知识之网络编程——-基于UDP协议的通信例子

    UDP是一种不可靠的协议,它在通信两端各建立一个socket,这两个socket不会建立持久的通信连接,只会单方面向对方发送数据,不检查发送结果. java中基于UDP协议的通信使用DatagramS ...

  2. iOS协议

    ios中的协议:大家猛一看 感觉挺高深的  其实ios中的协议就是c#,java中的接口 只是变了一个形式: 自我感觉ios中的协议没有c#中的接口好  人家的接口就是固定你的程序内容的  而ios中 ...

  3. ios 协议分析

    1 基本用途 可以用来声明一大堆方法(不能声明成员变量) 只要某个类遵守了这个协议,就相当于拥有了这个协议中的所有方法声明 只要父类遵守了某个协议,就相当于子类也遵守了 2 格式 协议的编写 @pro ...

  4. iOS 7新功能例子

    参考https://github.com/shu223/iOS7-Sampler Code examples for the new functions of iOS 7. Contents Dyna ...

  5. iOS 协议

    协议分为三部分:声明.引用.实现. 通常,声明协议和声明协议类型的属性都是在同一个类中.声明协议和声明协议作为属性在头文件中,引用在声明类的实现文件中.而实现协议则在其它类中.

  6. ios协议和委托

    在iPhone开发协议和委托是常接触到的东西,到底什么是协议什么是委托,他们什么关系? 一 协议 (1)协议相当于没有与类相关联的接口,他申明一组方法,列出他的参数和返回值,共享给其他类使用,然后不进 ...

  7. iOS 协议分发

    Github:AOMultiproxier.HJProtocolDispatcher 协议实现分发器,能够轻易实现将协议事件分发给多个实现者. 一.AOMultiproxier.h #define A ...

  8. ios协议调起app

    function openIos(url, callback) { if (!url) { return; } var node = document.createElement('iframe'); ...

  9. iOS delegate, 代理/委托与协议.

    之前知知道iOS协议怎么写, 以为真的跟特么java接口一样, 后来发现完全不是. 首先, 说说应用场景, 就是当你要用一个程序类, 或者说逻辑类, 去控制一个storyboard里面的label, ...

随机推荐

  1. [MySQL] Data too long for column 'title' at row 1

    李刚轻量级JavaEE第六章的坑..艹李刚自己有没试过这些代码的啊,6.4这一份HqlQuery.java里需要的表,根本就跟他提供的sql脚本对不上啊..坑爹啊,而且字符编码集也有问题. 出现这个原 ...

  2. matlab求定积分和不定积分

    matlab求定积分与不定积分 创建于2018-03-21 22:42 求定积分与不定积分是一件比较繁琐的事,但是我们可以借助matlab,下面与大家分享解决方法 材料/工具 matlab 求不定积分 ...

  3. [Xcode 实际操作]四、常用控件-(9)普通警告窗口的使用

    目录:[Swift]Xcode实际操作 本文将演示警告窗口的使用方法. 警告窗口不仅可以给用户展现提示信息,还可以提供若干选项供用户选择. 在项目导航区,打开视图控制器的代码文件[ViewContro ...

  4. 在pom包中添加spring-boot-starter-test包引用

    有很多网友会时不时的问我,spring boot项目如何测试,如何部署,在生产中有什么好的部署方案吗?这篇文章就来介绍一下spring boot 如何开发.调试.打包到最后的投产上线. 开发阶段 单元 ...

  5. redux中createStore方法的默认参数

    一般使用方法: createStore(reducer, applyMiddleware(thunk)) 传递默认参数: createStore(reducer, defaultState, appl ...

  6. EIGRP-3-EIGRP的多参数度量

    带宽度量参数本身无法区分10Gbit/s及更高速率的接口.对1Gbit/s接口,默认延迟度量参数已设置为最低值1(10微妙).而且EIGRP承载的是经过换算的参数,每台路由器需要将其换算回再计算新开销 ...

  7. Ubuntu下rsyslog审计用户bash操作命令、收集、写入MySQL

    服务端 2台服务端:10.25.109.64.10.45.18.133 1.rsyslog最新版本安装 sudo add-apt-repository ppa:adiscon/v8-stable su ...

  8. 修改Gradle本地仓库

    问题描述 Gradle 默认的本地仓库为 C:\Users\用户名\.gradle,不想让其一直下载东西占用 C 盘资源. 解决方法 新建环境变量名:GRADLE_USER_HOME,变量值为:D:\ ...

  9. mathjax;latex

    \lfloor $\lfloor$ \rfloor $\rfloor$ \sum_{i=1}^{n} $\sum_{i=1}^{n}$ \mu $\mu$ \mid $\mid$ \Leftright ...

  10. 非局部均值去噪(NL-means)

    非局部均值(NL-means)是近年来提出的一项新型的去噪技术.该方法充分利用了图像中的冗余信息,在去噪的同时能最大程度地保持图像的细节特征.基本思想是:当前像素的估计值由图像中与它具有相似邻域结构的 ...