Objective-C:10_protocol

protocol:协议 (相当于C#中的接口)

协议最多用在:代理模式、观察者模式

OC中类只支持单继承,但是可以遵守多份协议  <协议1,协议2,协议3。。。。。>

定义一个名叫MyProtocol的协议

@protocol MyProtocol

@end

只要一个类遵守了谋一份协议,就能拥有这份协议中所有的方法声明

一个类遵守某份协议的方法:

@interface Person : NSObject    <MyProtocol>

@end

    : 继承

    <>    遵守协议

@protocol MyProtocol

@required  //在这个关键字之后的方法声明都要求实现,不实现就会有警告(默认就是@required)

@optional  //在这个关键字之后的方法声明不要求实现(不实现也不会有警告)

@end

协议也可以遵守另一个协议(就像C#中接口可以实现另一个接口一样)

一个协议遵守了另外一个协议,就可以拥有另一个协议的所有方法声明

基协议:

1、NSObject是一个基类,最根本最基本的类,任何其他类最终都要继承它

2、其实还有一个基协议,名字也叫NSObject,它是一个基协议,最根本最基本的协议

3、NSObject协议中声明很多最基本的方法,比如description、retain、release等

4、建议每个新的协议都要遵守NSObject协议

可以使用协议限制对象类型:

要求obj,保存的对象必须遵守MyProtocol协议、并且继承了Person

Person<MyProtocol> *obj = [[Person alloc] init];

一个类需要遵循协议的时候需要引用协议

一种方法是#import <MyProtocol.h>

一种方法是@protocol  MyProtocol   (使用这种方法的时候需要再对应的 .m 文件中#import <MyProtocol.h>)优先使用这种方法

        

总结:

1、协议的定义

@protocol   协议名称  <NSObject>

//方法声明列表。。。。。

@end

2、如何遵守协议

-》类遵守协议

@interface  类名:父类名  <协议名称1,协议名称2........>

@end

-》协议遵守协议

@protocol  协议名称  <其他协议名称1,其他协议名称2...........>

@end

3、协议中方法声明的关键字

-》@required(默认)  要求实现,如果没有实现,会发出警告

-》@optional        不要求实现,怎样都不会有警告

4、定义一个变量的时候,限制这个变量保存的对象遵守某个协议

类名<协议名称>  *变量名;

id<协议名称>   变量名;

NSObject<MyProtocol>  *obj;

id<MyProtocol>  obj2;

如果没有遵守对应的协议,编译器会警告

5、@proerty中声明的属性也可以用做一个遵守协议的限制

@property  (nonatomic , strong) 类名<协议名称> *属性名;

@property  (nonatomic , strong)  id<协议名称>   属性名;

@property  (nonatomic , strong)  Dog<MyProtocol> *dog;

@property  (nonatomic , strong)  id<MyProtocol>  dog;

6、协议可以定义在单独的.h文件中,也可以定义在某个类中

如果这个协议只用在某个类中,应该把协议定义在类中

如果这个协议用在很多类中,应该定义在单独文件中

7、分类可定义在单独的 .h和 .m文件中,也可定义在原来类中

一般情况下,都是定义在单独文件中

定义在原来类中的分类,只要求能看懂语法

时间: 2024-09-07 19:49:49

Objective-C:10_protocol的相关文章

objective c:import和include的区别, &quot;&quot;和&lt;&gt;区别

#include 指令只是告诉编译器把所要引用的头文件复制粘贴过来 #import 会检查是否已经导入过了,更有效率,更快. 比如a文件引用过头文件x.h,b文件也需要x.h,但b文件引用了a,则b中就不需要再重新引用x.h了. <>和""在头文件的区别 一般系统自带的用<> 而用户自己定义的用""

容灾、备份、存储

百度词条---王建成解读 容灾:一般是异地,否则如何容得了灾?==>是不是本地.不同机房就不算容灾,究竟是地方还是技术本身才是关键? 经典语录:容灾系统是数据存储备份的最高层次. [数据级容灾]是指通过建立异地容灾中心,做数据的远程备份,在灾难发生之后要确保原有的数据不会丢失或者遭到破坏,但在数据级容灾这个级别,发生灾难时应用是会中断的.在数据级容灾方式下,所建立的异地容灾中心可以简单地把它理解成一个远程的数据备份中心.数据级容灾的恢复时间比较长,但是相比其他容灾级别来讲它的费用比较低,而且构建

项目管理术语表

术语表中的许多单词,在词典中都有更广泛甚至不同的含义.本术语表遵循如下惯例对术语进行定义:? 在某些情况下,一个术语由多个单词组成(如风险紧迫性评估):? 当出现同义词时,不再对同义词进行定义,而建议读者参见相应的常用词语(即见某某词语):? 对非同义词的相关术语,则在其定义结尾处标明交叉引用(即参见某某词语).Acceptance Criteria 验收标准:可交付成果通过验收前必须满足的一系列条件.Accepted Deliverables 验收的可交付成果:项目产出的,且被项目客户或发起人

(原创)Stanford Machine Learning (by Andrew NG) --- (week 7) Support Vector Machines

本栏目内容来源于Andrew NG老师讲解的SVM部分,包括SVM的优化目标.最大判定边界.核函数.SVM使用方法.多分类问题等,Machine learning课程地址为:https://www.coursera.org/course/ml 大家对于支持向量机(SVM)可能会比较熟悉,是个强大且流行的算法,有时能解决一些复杂的非线性问题.我之前用过它的工具包libsvm来做情感分析的研究,感觉效果还不错.NG在进行SVM的讲解时也同样建议我们使用此类的工具来运用SVM. (一)优化目标(Opt

OKR 方法 学习笔记

最近公司兴起了对OKR这个词的讨论,并且听到时总会伴随提到KPI,提到绩效考核.那OKR到底是什么呢?与KPI的区别在哪里?与绩效考核有什么关系?它与我们现在推行的敏捷开发有啥关系呢?因此,就到网上查了些资料,加上个人的一些经验和理解,尽量用少的篇幅,整理成了这篇文章. 一.什么是OKR 我们先来看下什么是ORK,OKR的全称是Objectives and Key Results,即目标与关键成果法.它是一套定义和跟踪目标及其完成情况的管理方法. 一般人看到OKR都会想起Google.事实上,O

Andrew Ng机器学习课程7

回顾 通过定义训练集S={(x(i),y(i));i=1,2,...,m}与线性决策平面(w,b)之间的function margin γ^和geometric margin γ .好的分类决策平面特点得到了一个最优化问题: max(γ,w,b)γ s.t. y(i)(wTx(i)+b)≥γ, ||w||=1 下面要介绍的就是如何解决这个最优化问题,一个思路就是将这个没有"现货"可以解决的优化问题,转变为off-the-shelf的最优化问题的形式,以便直接拿来使用. 最优化问题推导过

24、【华为HCIE-Storage】--Hyper Snapshot(块业务)

------------------------------------重要说明------------------------------------ 以下部分内容来网络,部分自华为存储官方教材 具体教材内容请移步华为存储官网进行教材下载 网络引用内容无法找到原创,如有侵权请通知 ------------------------------------重要说明------------------------------------ 随着计算机技术的发展,数据备份的重要性也逐渐凸显.在最初的数据

(4.19)深入理解SQLSERVER的日志链

您真的理解了SQLSERVER的日志链了吗? 转自:https://www.cnblogs.com/lyhabc/p/3460272.html 先感谢宋沄剑给本人指点迷津,还有郭忠辉童鞋今天在QQ群里抛出的问题 这个问题跟宋沄剑讨论了三天,再次感谢宋沄剑 一直以来,SQLSERVER提供了一个非常好的管理工具:SSMS 又因为这个管理工具太好了,所有操作的简单化,以至于使我们中毒太深, 对于SQLSERVER内部的一些概念搞得不清不楚 比如这些概念:日志备份链,备份日志链,日志链,备份链,备份集

灾备建设的两个指标RTO和RPO

数据备份最重要的目的就是"恢复数据".当系统出现故障损毁时,可以通过数据备份来恢复,最大限度降低损失. ? ? ? ? 但是,系统需要进行什么程度的备份,这就需要根据实际情况来制定.这里,有两个指标可以参考: RTO:Recovery Time Objective RPO:Recovery Point Objective RTO,指的是你可以容忍的系统服务中断时间,或者说系统服务中断后,用来恢复系统服务的最大时间.如果你想要RTO时间为0,那么你就要有充裕的资金来支撑系统建设,至少需要