蓝鸥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 协议和代理设计模式介绍相关推荐

  1. iOS开发篇——OC之NSNumber数字对象讲解

    蓝鸥iOS培训讲师推荐:先前已经和大家聊了很多关于OC方面的内容了,如:类目和延展.非运行状态(应用启动场景).. 等等,不知道大家能否理解的了?今天继续为大家带来OC相关内容NSNumber数字对象 ...

  2. iOS开发-使用OC搭建自己的Socket 包括服务端和客服端

    iOS开发-使用OC搭建自己的Socket 包括服务端和客服端 前言 开发须知 客服端 服务端 两端测试 前言 iOS开发中需要使用到Socket通信的地方,socket分为UDP和TCP,这次分享的 ...

  3. iOS开发 - OC - block的详解 - 基础篇

    深入理解oc中的block 苹果在Mac OS X10.6 和iOS 4之后引入了block语法.这一举动对于许多OC使用者的编码风格改变很大.就我本人而言,感觉block用起来还是很爽的,但一直以来 ...

  4. 【转】iOS开发-Protocol协议及委托代理(Delegate)传值

    原文网址:http://www.cnblogs.com/GarveyCalvin/p/4210828.html 前言:因为Object-C是不支持多继承的,所以很多时候都是用Protocol(协议)来 ...

  5. iOS开发-Protocol协议及委托代理(Delegate)传值

    前言:因为Object-C是不支持多继承的,所以很多时候都是用Protocol(协议)来代替.Protocol(协议)只能定义公用的一套接口,但不能提供具体的实现方法.也就是说,它只告诉你要做什么,但 ...

  6. 最佳实践(2):iOS开发篇

    本文由 伯乐在线 - 戴仓薯 翻译,dopcn 校稿.未经许可,禁止转载! 英文出处:futurice.欢迎加入翻译组. 这份文档就像软件项目一样,如果我们不维护它就会逐渐腐坏.欢迎大家跟我们一起来维 ...

  7. iOS开发(OC)——折线图的绘制(带动画)

    新建一个DrawLine类继承UIView DrawLine.h代码 @property (nonatomic,strong)NSMutableArray *data;@property (nonat ...

  8. iOS开发(OC)——音频播放AVPlayer

    AVPlayer支持在线播放,使用如下: 1.头文件 #import <AVFoundation/AVFoundation.h> @property (nonatomic, strong) ...

  9. iOS开发(OC)——图片浏览器(本地图片和网络图片都可以用)

    iOS开发交流群:301058503 Demo地址:https://github.com/liumude/PictureScan.git 使用(具体请看Demo) PictureSacnViewCon ...

最新文章

  1. jmeter 逻辑控制器
  2. 使用docker安装mysql服务
  3. 手把手视频:万能开源Hawk抓取动态网站
  4. spring boot 日志文件配置(logback-spring.xml)亲测可用!
  5. 消息队列之延时消息应用解析及实践
  6. EVGA Precision—— 显卡超频神器 可用于调节风扇转速 降温
  7. linux命令本质,Linux 的命令机制
  8. 公司使用 Qt 到底要不要付费?| 博文精选
  9. mysql执行计划中 性能最好_MySQL性能优化-explain执行计划
  10. python学到什么程度可以找到工作-月薪2万+的Python Web岗,学到什么程度能找到工作?...
  11. java 按拼音模糊搜索汉字_数据查询支持中文拼音首字母模糊检索
  12. 如何在vue中使用Cesium加载shp文件、wms服务、WMTS服务
  13. Google Play Store上线流程
  14. 后端开发实习生面经(已收offer)中科院计算所下属某所
  15. 程序员根本不是稳定工作!
  16. mysql减五元,[MySQL]處理字元編碼的一些心得
  17. 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...
  18. 代理IP服务器是如何实现网络加速的?
  19. 十分全面的传奇手游搭建教程
  20. 山东大学 英文版《软件工程》教学内容回顾

热门文章

  1. redis——数据库
  2. 《Head First设计模式》第六章笔记-命令模式
  3. 剑指offer_02
  4. 解读设计模式----简单工厂模式(SimpleFactory Pattern),你要什么我就给你什么
  5. JM8.5中的7种宏块模式问题
  6. 关于RESTful一些注意事项,接口开发规范
  7. spring AOP解说
  8. 提高虚拟机运行速度方法
  9. Redis学习第五课:Redis Set类型及操作
  10. 【树莓派】修改树莓派盒子MAC地址