iOS阶段学习第19天笔记(协议-Protocol)
iOS学习(OC语言)知识点整理
一、关于协议(Protocol)的介绍
1)概念:协议指多个对象之间协商的一个接口对象,协议提供了一些方法用在协议的实现者和代理者
之间通讯的一种方式
2)声明一个协议@protocol协议的名字<基协议> 一个协议可以遵守另一个协议:
基协议(这个协议就拥有了基协议中所有方法的声明)
3)协议中不能声明成员变量,只能有方法声明。
4)协议中声明方法,默认是required 表明方法是必须要实现的,否则会有系统警告,但不会报错
5)协议中@optional表明方法是可选的(可以实现也可以不实现)
6)使用协议:某个类遵守协议,类名后面<协议名> ;所谓遵守协议就是:类拥有了协议中所有方法的声明,
必须实现协议中规定的方法;一个类可以遵守多个协议(类拥有所有协议中声明的方法,必须实现所有
协议中规定的方法)
7)一个协议可以遵守另一个协议,遵守协议后就拥有了另一个协议所有方法的声明,同时还可以添加自己的方法
8)一个协议可以遵守多个协议,并拥有所有基协议的方法
9)协议的声明与使用方法 实例代码:
1、添加一个基于Protocol命名为MyProtocol的.h 文件 声明一些协议方法 例如:
#import <Foundation/Foundation.h>
@protocol MyProtocol <NSObject>
//协议中不能声明成员变量,只有方法
//{
// int _a;
//}
//协议中声明方法,默认是required
-(void)test1;
-(void)test2;
//@required表明方法是必须要实现的
@required
-(void)test3;
//@optional表明方法是可选的(可以实现也可以不实现)
@optional
-(void)test4;
@end
2、定义一个Person类 在.h文件中使用协议MyProtocol 例如:
#import <Foundation/Foundation.h>
#import "MyProtocol.h"
@interface Person : NSObject<MyProtocol>
@property(nonatomic,copy)NSString *name;
-(void)print;
@end
3、在Person类的.m文件中实现协议方法 例如:
#import "Person.h"
@implementation Person
-(void)print
{
NSLog(@"person:%@",self.name);
}
//实现协议中规定的方法
-(void)test1
{
NSLog(@"test1");
}
-(void)test2
{ }
-(void)test3
{ } @end
4、在main文件中执行方法 例如:
Person *p1=[[Person alloc]init];
//判断p1所属的类是否遵守了协议
if([p1 conformsToProtocol:@protocol(MyProtocol)]){
//判断p1所属的类是否实现了方法
if([p1 respondsToSelector:@selector(test1)]){
[p1 test1];
}
} NSObject *obj1=[[NSObject alloc]init];
obj1=nil;
NSObject *obj2=@"hello";
obj2=nil;
//对obj3指向的对象做一个限制
NSObject<MyProtocol> *obj3=@"abc";
//obj4可以指向任意类型的对象,但是必须遵守MyProtocol协议
id<MyProtocol> obj4=[[Person alloc]init];
Person<MyProtocol> *obj5=[[Person alloc]init];
10)OC中没有多继承,但可以通过协议实现,可通过使用多个协议来实现类似多继承的方法。
11)协议主要用来统一规范接口;统一接口的方法:继承和协议
12)协议与继承的区别
1、继承也可以统一规范接口:子类继承父类所有的方法(可以不用重写,除非父类的方法不适合子类),
重写后的方法名与父类一样,达到了统一接口的目的;子类中可以增加成员变量
2、协议:一个类遵守协议,类就具有协议中所有的方法,如果多个类都遵守同一个协议,这些类都有协议
中规范的方法,达到了统一接口的目的;协议中不能有成员变量
iOS阶段学习第19天笔记(协议-Protocol)的更多相关文章
- iOS阶段学习第21天笔记(ARC内存管理-Copy-代理)
iOS学习(OC语言)知识点整理 一.OC 中的ARC内存管理 1)ARC中释放对象的内存原则:看这个对象有没有强引用指向它 2)strong:强引用,默认情况下的引用都是强引用 3) weak:弱引 ...
- iOS阶段学习第29天笔记(UITextField的介绍)
iOS学习(UI)知识点整理 一.关于UITextField的介绍 1)概念: UITextField 是用于接收用户输入的一个控件 2)UITextField 初始化实例代码: //创建一个UIt ...
- iOS 阶段学习第七天笔记(函数、递归)
iOS学习(C语言)知识点整理笔记 一.函数 1)概念:具有特定功能的代码块的封装 2)函数的定义: 函数类型+函数名(形参列表) 函数类型 函数名(形参类型1 形参名1,形参类型2 形参名2 ...
- iOS阶段学习第三天笔记(运算符)
iOS学习(C语言)知识点整理笔记 1.运算符 一.算术运算符 1)表达式由变量.常量.运算符构成,有确定的类型和值 2)算术运算符包括: +(加),-(减),*(乘),/(除),%(模) 3)算术运 ...
- iOS 阶段学习第三天笔记(运算符)
iOS学习(C语言)知识点整理笔记 1.运算符 一.算术运算符 1)表达式由变量.常量.运算符构成,有确定的类型和值 2)算术运算符包括: +(加),-(减),*(乘),/(除),%(模) 3)算术运 ...
- iOS阶段学习第32天笔记(页面传值方法介绍)
iOS学习(UI)知识点整理 一.界面传值方法 1.方法一 Block传值 通过SubView视图的Block向View视图传值改变View视图的背景色 实例代码: 1)SubViewContro ...
- iOS阶段学习第30天笔记( UIViewController—Delegate(代理) )
iOS学习(UI)知识点整理 一.UIViewController的介绍 1)概念:UIViewController 即视图控制器,用来管理和控制页面跳转的一个类 ,iOS里面采用了MVC的体系结构, ...
- iOS阶段学习第20天笔记(MRC内存管理)
iOS学习(OC语言)知识点整理 一.OC中的内存管理 1)概念:内存管理的对象为所有继承了NSObject的对象,对基本数据(如:int .float.double...)无效 OC中采用 ...
- iOS阶段学习第18天笔记(Plist-Archiver-归档与解归档操作)
iOS学习(OC语言)知识点整理 一.归档与解归档的操作 1)归档是一个过程,将一个或多个对象存储起来,以便以后可以还原,包括将对象存入文件,以后再读取 将数据对象归档成plist文件 2)plist ...
随机推荐
- [ZigBee] 2、 ZigBee开发环境搭建
本节介绍ZigBee基本开发环境搭建,附件中有本节介绍的软件下载地址~ 链接:http://pan.baidu.com/s/1bLdqxg 1.IAR Embedded Workbench 的安装 S ...
- Windows 10 下安装 npm 后全局 node_modules 和 npm-cache 文件夹的设置
npm 指 Node Package Manager,是 Node.js 中一个流行的包管理和分发工具.Node.js 在某个版本的 Windows 安装包开始已经加入了 npm,现在可以进入 htt ...
- C#入门基础二
万物皆对象:对象是包含数据和操作的实体. 属性:名词 / 对象 \ 方法:动词 ============================================== ...
- linnux 3
kill [信号代码] 进程ID 以优雅的方式结束进程# kill -l PID-l选项告诉kill命令用好像启动进程的用户已注销的方式结束进程.当使用该选项时,kill命令也试图杀死所留下的子进程. ...
- Java集合框架知识总结
两大体系:Collection,Map 一.Collection: List 接口 : List:里面对象全部是有序的(通过三种方法来遍历) ArrayList,LinkedList,Vertor A ...
- MSP是什么?
本人在项目管理圈儿也算是摸爬滚打了几载,近几年真是各种压力大,看同行们各种参加培训.认证......我也不能懈怠啊,赶紧上网搜搜相关的培训和认证信息,不搜不知道一搜吓一跳.原本只知道PMP和PRINC ...
- EF架构~为BulkInsert引入SET IDENTITY_INSERT ON功能
回到目录 在设计表结构时,我们通常将不是很在乎表现的主键设计成自增长的,大数据量用bigint,一般地用int就可以了,int就是C#里的Int32,它最大可以存储到2147483647,21亿,基本 ...
- Node.js入门:Node.js&NPM的安装与配置
Node.js安装与配置 Node.js已经诞生两年有余,由于一直处于快速开发中,过去的一些安装配置介绍多数针对0.4.x版本而言的,并非适合最新的0.6.x的版本情况了,对此,我们将在0. ...
- fir.im Weekly - 做一款 App 需要考虑什么
开发 App 是一个痛并快乐的旅程.工具越来越多,成本也越来越低,那么在开发之前需要考虑些什么?limboy 总结了一些经验和反思--做一个 App 前需要考虑的几件事,参考一下为你的 App 多留点 ...
- HTML中的title换行问题
有时我们需要在html元素的title中换行显示信息.以下几种方法均可以实现: 直接在titile属性中使用换行,如下所示: asd">asdsadsad</a> 在tit ...