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 ...
随机推荐
- 跟我一起云计算(1)——storm
概述 最近要做一个实时分析的项目,所以需要深入一下storm. 为什么storm 综合下来,有以下几点: 1. 生逢其时 MapReduce 计算模型打开了分布式计算的另一扇大门,极大的降低了实现分布 ...
- 使用aggregate在MongoDB中查找重复的数据记录
我们知道,MongoDB属于文档型数据库,其存储的文档类型都是JSON对象.正是由于这一特性,我们在Node.js中会经常使用MongoDB进行数据的存取.但由于Node.js是异步执行的,这就导致我 ...
- Senparc.Weixin.MP SDK 微信公众平台开发教程(十四):请求消息去重
为了确保信息请求消息的到达率,微信服务器在没有及时收到响应消息(ResponseMessage)的情况下,会多次发送同一条请求消息(RequestMessage),包括MsgId等在内的所有文本内容都 ...
- jetty
相关的文章太多了,我只按照自己的意思做简单总结. 参见: http://www.cnblogs.com/duanxz/p/3154982.html http://www.cnblogs.com/win ...
- Jsp+ Servlet+Ajax实现点赞功能
1.jsp页面,使用ajax实现局部刷新 2.servlet接受处理去更新数据库 随后上传
- 知方可补不足~SQL2008中的发布与订阅模式
回到目录 作用:完成数据库与数据库的数据同步 原理:源数据库发布需要同时的表,存储过程,或者函数:目标数据库去订阅它,当源发生变化时,目标数据库自己同步,注意,由于这个过程是SQL自动完成的,所以要求 ...
- 手把手教你在VirtualBox中与主机共享文件夹
安装VirtualBox为了共享文件夹,折腾了一晚上!网上的很多资料都不是很全面,这里就全面的总结一下,如果有其他的疑问,可以留言多多交流. VirtualBox下载地址,版本为5.1.2 设置共享文 ...
- Atitit 数据存储的分组聚合 groupby的实现attilax总结
Atitit 数据存储的分组聚合 groupby的实现attilax总结 1. 聚合操作1 1.1. a.标量聚合 流聚合1 1.2. b.哈希聚合2 1.3. 所有的最优计划的选择都是基于现有统计 ...
- WPF入门教程系列七——布局之WrapPanel与StackPanel(二)
三. WrapPanel WrapPanel布局面板将各个控件从左至右按照行或列的顺序罗列,当长度或高度不够是就会自动调整进行换行,后续排序按照从上至下或从右至左的顺序进行. Orientation— ...
- XML学习笔记1——概述
我对于XML是很不够重视的,认识也是非常肤浅的,因为在之前的Web经验中,基本上都可以使用JSON来代替XML,JSON网络流量少,解析快,JS支持好等这些特点让我对自己的观点坚信不疑.然而我渐渐地改 ...