iOS开发篇——OC 协议和代理设计模式介绍
蓝鸥iOS培训讲师推荐:好久没和大家沟通了,没和大家沟通了,今天就和大家说说有关OC内容协议和代理设计模式。首先要讲的是协议
一、协议
OC中的协议和接口有些相似,协议中定义的方法,在类中实现。协议一般情况下是用来实现委托对象。委托对象一般用来自己定义行为或者动作,也就是调用自己定义方法,不过自己不实现该方法,委托其它的类来实现该方法。
1、协议的声明:
HelloProtocol.h
@required是缺省值,是一定要实现的方法,@optional可选择的。协议只有一个.h文件,本身不是类,他是定义了一个其他类可实现的接口。
2、协议的实现:
Person.h
Person.m
3、用协议修饰变量
1)定义变量:
id<MyProtocolName>myNewVariable;
那么myNewVatiable是遵循我们定制的这个MyProtocolName协议的。
2)定义函数:
-(void)doSomethingWithThisObject:(id<MyprotocolName>)aObject
那么这个函数的参数是需要遵循我们定制的这个MyProtocolName协议的。
二、代理(委托)设计模式
代理:指一个对象提供机会给另一个对象中的行为发生变化是做出的反应。
基本思想是:两个对象共同解决问题,一般情况下用于对象之间的通信。
代理设计模式的基本特点如下:
1、简化了对象的行为,最小化了对象之间的耦合度。
2、使用代理,一般来说无需子类化。
3、简化了我们应用程序开发,既容易实现,有灵活。例如:
A.h
A.m
委托对象的实现:
B.h
B.m
如果是这样,A就可以委托B去做fun的事了。
UIApplication类是一个非常典型的例子,定义了一个应用程序应该有的行为/动作。而不是非常强制性的让你的UIApplication子类去接受当前应用程序的状态消息而作出相应处理。UIApplication通过调用特别方法,将消息传给它的委托对象。那么该委托对象通过实现名为UIApplicationDelegate的协议,到了后来就可以接受到当前应用程序的状态消息而做出相应处理。例如内存不够的错误,应用程序被中断等重要消息。
是不是看起来有点复杂啊!不过其实理解起来一点也不太困难,只要用心理解,再加上沟通就不成问题了。
转载于:https://blog.51cto.com/laojiangboke/1327907
iOS开发篇——OC 协议和代理设计模式介绍相关推荐
- iOS开发篇——OC之NSNumber数字对象讲解
蓝鸥iOS培训讲师推荐:先前已经和大家聊了很多关于OC方面的内容了,如:类目和延展.非运行状态(应用启动场景).. 等等,不知道大家能否理解的了?今天继续为大家带来OC相关内容NSNumber数字对象 ...
- iOS开发-使用OC搭建自己的Socket 包括服务端和客服端
iOS开发-使用OC搭建自己的Socket 包括服务端和客服端 前言 开发须知 客服端 服务端 两端测试 前言 iOS开发中需要使用到Socket通信的地方,socket分为UDP和TCP,这次分享的 ...
- iOS开发 - OC - block的详解 - 基础篇
深入理解oc中的block 苹果在Mac OS X10.6 和iOS 4之后引入了block语法.这一举动对于许多OC使用者的编码风格改变很大.就我本人而言,感觉block用起来还是很爽的,但一直以来 ...
- 【转】iOS开发-Protocol协议及委托代理(Delegate)传值
原文网址:http://www.cnblogs.com/GarveyCalvin/p/4210828.html 前言:因为Object-C是不支持多继承的,所以很多时候都是用Protocol(协议)来 ...
- iOS开发-Protocol协议及委托代理(Delegate)传值
前言:因为Object-C是不支持多继承的,所以很多时候都是用Protocol(协议)来代替.Protocol(协议)只能定义公用的一套接口,但不能提供具体的实现方法.也就是说,它只告诉你要做什么,但 ...
- 最佳实践(2):iOS开发篇
本文由 伯乐在线 - 戴仓薯 翻译,dopcn 校稿.未经许可,禁止转载! 英文出处:futurice.欢迎加入翻译组. 这份文档就像软件项目一样,如果我们不维护它就会逐渐腐坏.欢迎大家跟我们一起来维 ...
- iOS开发(OC)——折线图的绘制(带动画)
新建一个DrawLine类继承UIView DrawLine.h代码 @property (nonatomic,strong)NSMutableArray *data;@property (nonat ...
- iOS开发(OC)——音频播放AVPlayer
AVPlayer支持在线播放,使用如下: 1.头文件 #import <AVFoundation/AVFoundation.h> @property (nonatomic, strong) ...
- iOS开发(OC)——图片浏览器(本地图片和网络图片都可以用)
iOS开发交流群:301058503 Demo地址:https://github.com/liumude/PictureScan.git 使用(具体请看Demo) PictureSacnViewCon ...
最新文章
- jmeter 逻辑控制器
- 使用docker安装mysql服务
- 手把手视频:万能开源Hawk抓取动态网站
- spring boot 日志文件配置(logback-spring.xml)亲测可用!
- 消息队列之延时消息应用解析及实践
- EVGA Precision—— 显卡超频神器 可用于调节风扇转速 降温
- linux命令本质,Linux 的命令机制
- 公司使用 Qt 到底要不要付费?| 博文精选
- mysql执行计划中 性能最好_MySQL性能优化-explain执行计划
- python学到什么程度可以找到工作-月薪2万+的Python Web岗,学到什么程度能找到工作?...
- java 按拼音模糊搜索汉字_数据查询支持中文拼音首字母模糊检索
- 如何在vue中使用Cesium加载shp文件、wms服务、WMTS服务
- Google Play Store上线流程
- 后端开发实习生面经(已收offer)中科院计算所下属某所
- 程序员根本不是稳定工作!
- mysql减五元,[MySQL]處理字元編碼的一些心得
- 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...
- 代理IP服务器是如何实现网络加速的?
- 十分全面的传奇手游搭建教程
- 山东大学 英文版《软件工程》教学内容回顾