iOS 协议

摘要:
当一个对象需要与一个或多个对象对话,但不知道对象的类时,协议尤其有用。Objective-C中的协议相当于Java中的接口。该协议在整个Cocoa框架中使用。Objective-C有正式和非正式协议。

一、介绍

  协议是一组预定义的方法,一个类可以选择来实现它们。

  当对象需要与一个或多个对象对话,但是不知道对象的类时,协议特别有用。

  Objective-C中的协议相当于Java中的接口。

  协议在整个Cocoa框架中使用。Objective-C拥有正式的和非正式的协议。正式的协议声明了一组必需的方法,可能还有某些可选的方法。随后,类可以通过实现协议所必需的所有方法来实现该协议。当一个类声明它使用的正式协议时,编译器会检查,确保该类实现了协议所有必需的方法。非正式协议则只是在一个子类头文件中的一个方法声明的列表,一个类可以选择来实现这些方法。

二、使用

  >采用一个协议的类,必须实现协议的所有必须的方法

  >采用一个协议的类,可以自由的实现或不实现协议的任何可选方法

    iOS 协议第1张

  >类可以实现多个协议,协议也可以实现协议

  >可选和必需的方法分别使用@optional 和 @required指令来标记

  >类通过在类的@interface 行的超类名称之后的一个尖括号中放置字而已的名称,从而声明其采用了该协议。包含了协议声明的头文件,对于采用协议的类的@interface部分,必须是可见的

    iOS 协议第2张

三、iOS中消息传递模式

  通知:在iOS中由通知中心进行消息接受和消息广播,是一种一对多

  代理:是一种通用的代理模式,iOS中对代理支持的很好,由代理对象,委托者,协议三部分组成

  block:一种回调方法,可将毁掉代码直接写在block代码块中

  target action:通过将对象传递到另一个类中,在另一个类中将该对象作为target的方法来调用该对象方法,从内存角度看与代理类似

  KVO:NSObject的Category -NSKeyValueObserving,通过属性监听的方式来监测某一个值的变化,当值发生变化时调用KVO回调方法

四、代理设计模式

  代理的基础使用:

    代理是一种通用的设计模式,在iOS中代理模式支持的很好,有特定的语法来实现代理模式,OC语言可以通过@protocol实现协议

    代理由三部分组成:

      协议:用来制定代理双方可以做什么,必须做什么

      代理:根据指定的协议,完成委托方需要实现的功能

      委托:根据指定的协议,制定代理去完成什么功能

     iOS 协议第3张

    在委托方调用代理方法时都需做一个判断,判断代理是否实现当前方法,否则程序崩溃

        iOS 协议第4张

    代理对象只能是弱引用 

    iOS 协议第5张

五、链接

   http://my.oschina.net/u/2472425/blog/649179

   http://my.oschina.net/zboy/blog/493104

    

免责声明:文章转载自《iOS 协议》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Axure 工具的使用CentOS 7系统KVM虚拟机安装过程详解下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

推荐 iOS 上的一款黑科技自动化脚本:捷径

1. 场景 相信大部分同学早上醒来之后,都是手动打开音乐软件,播放自己喜欢的音乐,然后手动滑动屏幕,查看今天的天气,日复一日,生活显得特别的朴实无华且枯燥 试想一下,如果清晨醒来时,按掉闹铃后能自动化语音播放今日天气,随机播放自己喜欢的音乐,给自己带来元气满满的一天,这种感觉不要太爽! 本篇文章将为大家推荐这款 iOS 端的自动化应用,快捷指令 App,可...

maven全局配置文件settings.xml详解

概要 settings.xml有什么用? 如果在Eclipse中使用过Maven插件,想必会有这个经验:配置settings.xml文件的路径。settings.xml文件是干什么的,为什么要配置它呢?从settings.xml的文件名就可以看出,它是用来设置maven参数的配置文件。并且,settings.xml是maven的全局配置文件。而pom.xm...

H5网页在ios,android,微信中打开手机中的地图导航

需求 一个H5页面需要实现在ios的浏览器,android的浏览器以及微信中打开时支持打开手机的地图导航。 实现 let url = '' if (myBrowser1() === 'android') { // 判断是安卓环境 url = `androidamap://navi?sourceApplication=amap&poiname...

ios真机调试时需要添加的UDID是什么?怎么获取?

很多开发者在真机调试测试ios应用时,会看到需要添加udid,搞不清这个是什么东西应该怎么获取。 udid就是手机的一个串号,相当于手机的身份证,具有唯一性。 下面介绍如何获取udid并添加到开发者中心后台。 有两种方式可以获取udid ios app真机调试到上架App Store完整教程 1、苹果手机助手获取UDID 如爱思助手,电脑下载爱思助手...

移动三“.NET研究”国己然鼎立,普​通开发者如何选择开发​平台? 狼人:

  Nokia和Microsoft 终于搞基成功,业内人事普遍都看好两家厂商的“软硬结合”。这一结局直接把Windows Phone 7 这一新兴手机移动操作系统送到与如日中天的 iPhone 与 Android 在同一位置上,变成了三国之势。究竟两家公司的合作是 " No - Win " 还是 "Win - Kia " 这里不做讨论,只能引用我们瓷器国的...

10 深入kubernete落地实践深入101 ingress四层代理、session保持、定制配置、流量控制

深入Ingress-Nginx Deployment?   https 四层代理    访问控制 定制配置 项目 8-ingress 修改部署ds方式 Deployment 改成DaemonSet(ds)模式 #保存controller到文件 kubectl get deploy -n ingress-nginx nginx-ingress-control...