2019独角兽企业重金招聘Python工程师标准>>>

一、协议的基本概念

协议的声明看起来比较类似一个类的接口,不同的是协议没有父类也不能定义变量。协议是一种特殊的程序设计结构,用于声明专门被别的类实现的方法。协议在以下场合非常有用:

1、需要由别的类实现的方法。

2、声明未知类的接口。

3、两个类之间的通信。

二、协议的基本特点

1、协议可以被任何类实现其方法。

2、协议本身不是类,他是定义了一个其他类可实现的接口。

3、类目也可以采用协议。

三、协议的声明与实现

1、协议中的关键字

@required:表示必须强制实现的方法

@optional:表示可以选择实现的方法

/*协议中的声明*/
@protocol HelloProtocol <NSObject>
@optional
- (void)optionalMethod1;
- (void)optionalMethod2;
@required
- (void)requiredMethod1;
@end
/*采用了该协议*/
@interface Person:NSObject
<HelloProtocol,OtherProtocol>
@end
@implementation Person
- (void)requiredMethod1
{
}//该方法必须实现
- (void)optionalMethod1
{
}//该方法可以不用实现
- (void)optionalMethod2
{
}//该方法可以不用实现
@end

四、相关代码

//
//  HelloProtocol.h
//  Protocol
//
//  Created by moki on 14-8-5.
//  Copyright (c) 2014年 Santai. All rights reserved.
//#import <Foundation/Foundation.h>@protocol HelloProtocol <NSObject>@required
- (void)requiredMethod1;
@optional
- (void)optionalMethod1;
- (void)optionalMethod2;@end
//
//  Person.h
//  Protocol
//
//  Created by moki on 14-8-5.
//  Copyright (c) 2014年 Santai. All rights reserved.
//#import <Foundation/Foundation.h>
#import "HelloProtocol.h"@interface Person : NSObject <HelloProtocol>@end
//
//  Person.m
//  Protocol
//
//  Created by moki on 14-8-5.
//  Copyright (c) 2014年 Santai. All rights reserved.
//#import "Person.h"@implementation Person
- (void)requiredMethod1
{NSLog(@"这是必须要实现的一个协议方法");
}
- (void)optionalMethod1
{NSLog(@"这是可以不用实现的一个协议方法1");
}
- (void)optionalMethod2
{NSLog(@"这是可以不用实现的另一个协议方法2");
}
@end

五、代理(委托)设计模式

1、代理设计模式的基本概念

代理是指一个对象机构会对另一个对象中的行为发生变化时做出的反应。如,当你将一颗石子丢入水中,水面会泛起波纹。总而言之,代理设计模式的基本思想--两个对象协同解决问题,通常用于对象之间的通信。

2、代理设计模式的基本特点

简化了对象的行为,最小化了对象间的耦合度;

使用代理,一般来说无需子类化

简化了我们应用程序开发,既容易实现,又灵活

转载于:https://my.oschina.net/u/1426828/blog/298355

IOS 高级语法与设计模式5(5.3 协议的基本概念及用法)相关推荐

  1. python高级语法装饰器_Python高级编程——装饰器Decorator超详细讲解上

    Python高级编程--装饰器Decorator超详细讲解(上篇) 送你小心心记得关注我哦!! 进入正文 全文摘要 装饰器decorator,是python语言的重要特性,我们平时都会遇到,无论是面向 ...

  2. 【强烈推荐】超详解Python-魔法函数(高级语法)

    Python-魔法函数(高级语法) 1. 前言 1.1 什么是魔法函数? 1.2 魔法函数有什么作用? 2. 常见的魔法函数 3. 非数学运算 3.1 字符串表示 `__repr__` `__str_ ...

  3. Gradle入门系列(二)——groovy高级语法

    groovy高级语法 一.json操作 使用groovy自带的json工具进行json操作 groovy.json.JsonSlurper:将json原数据转成实体对象 groovy.json.Jso ...

  4. 出一套 iOS 高级面试题

    一千个读者眼中有一千个哈姆雷特,一千名 iOS 程序员心目中就有一千套 iOS 高级面试题.本文就是笔者认为可以用来面试高级 iOS 程序员的面试题. 这套题的题目跟公司和业务都没有关系,而且也并不代 ...

  5. webpack打包处理js文件中的高级语法

    前言 在js文件中定义一个User类 import $ from 'jquery' import './css/at.css' import './css/at.less' import './css ...

  6. 配置 postCSS 自动添加 css 的兼容前缀||打包样式表中的图片和字体文件||打包处理 js 文件中的高级语法

    配置 postCSS 自动添加 css 的兼容前缀 ① 运行 npm i postcss-loader autoprefixer -D 命令 ② 在项目根目录中创建 postcss 的配置文件 pos ...

  7. Unity3D 游戏引擎之IOS高级界面发送消息与Unity3D消息的接收(九)

    Unity3D 游戏引擎之IOS高级界面发送消息与Unity3D消息的接收 雨松MOMO原创文章如转载,请注明:转载自雨松MOMO的博客原文地址:http://blog.csdn.net/xys289 ...

  8. iOS中都有什么设计模式?各个设计模式的作用 (转载)

    原文地址: http://www.cnblogs.com/dxb123456/p/5479198.html 一  iOS中都有什么设计模式? 1.代理模式 2.观察者模式 3.MVC模式 4.单例模式 ...

  9. Win32高级语法 条件测试语句与分支语句

    .if 表达式1 .elseif 表达式2 .else 所以表达式为否 .endf ;if语句结束 下面两段程序分别使用汇编语法与高级语法对程序进行条件测试和分支, 弹出对话框当点击"是&q ...

最新文章

  1. AJAX面试题:一个页面实现增删改查(ASP.NET实现)
  2. ogg的孩子-无损音频编解码flac
  3. matlab的exec程序,C++调用Matlab画图的一段程序
  4. 第五十三期:公司如何选择数据库?DynamoDB、Hadoop和MongoDB 大比拼
  5. websocket的用途/场景
  6. ios(safar/微信)返回不执行js
  7. bzoj 1797: [Ahoi2009]Mincut 最小割 (网络流)
  8. 奇安信RSA观察|RSAC应用安全技术新风向
  9. c++ log 打印android_如何在Android C++文件中打印ALOGI(...)?
  10. View、Bitmap游戏常用
  11. 手把手教你在Android中使用bsdiff实现文件增量更新 (超详细)
  12. word怎么在下一页添加表头_Word 文档自动添加表头的方法
  13. Python L型组件填图问题(棋盘覆盖问题)
  14. 2021-10-18墨画子卿第一章
  15. unity中Loding.UpdatePreloading占用CPU过高如何解决?
  16. 按键精灵制作自用游戏脚本所需的简单操作
  17. 转:ARM 与RealView
  18. 科研热点|2023年IEEE Fellow入选者名单公布,中国学者占比1/4~
  19. 通俗理解计算机操作系统的作用
  20. CAD进阶练习(五)

热门文章

  1. 使用replace pioneer批量修改文件名
  2. windows下可用mysql吗_Windows下MySQL安装配置与使用
  3. js中一些常用的基本函数
  4. 有关OCS监控软件安装在windows上, 服务端显示乱码的问题
  5. DNS中的七大资源记录介绍
  6. Java.lang.Boolean类
  7. 惠普在笔记本新品的2007新的命名规则
  8. 本科主要数学科目的页数统计
  9. intellij设置scala的sdk
  10. 为什么spark没有java的交互模式?