iOS阶段学习第19天笔记(协议-Protocol)

王朝学院·作者佚名  2016-08-27
窄屏简体版  字體: 小  |  中  |  大  |  超大  

iOS学习(OC语言)知识点整理

一、关于协议(PRotocol)的介绍

1)概念:协议指多个对象之间协商的一个接口对象,协议提供了一些方法用在协议的实现者和代理者

之间通讯的一种方式

2)声明一个协议@protocol协议的名字<基协议> 一个协议可以遵守另一个协议:

基协议(这个协议就拥有了基协议中所有方法的声明)

3)协议中不能声明成员变量,只能有方法声明。

4)协议中声明方法,默认是required 表明方法是必须要实现的,否则会有系统警告,但不会报错

5)协议中@optional表明方法是可选的(可以实现也可以不实现)

6)使用协议:某个类遵守协议,类名后面<协议名> ;所谓遵守协议就是:类拥有了协议中所有方法的声明,

必须实现协议中规定的方法;一个类可以遵守多个协议(类拥有所有协议中声明的方法,必须实现所有

协议中规定的方法)

7)一个协议可以遵守另一个协议,遵守协议后就拥有了另一个协议所有方法的声明,同时还可以添加自己的方法

8)一个协议可以遵守多个协议,并拥有所有基协议的方法

9)协议的声明与使用方法 实例代码:

1、添加一个基于Protocol命名为MyProtocol的.h 文件 声明一些协议方法 例如:

1#import <Foundation/Foundation.h>2@protocol MyProtocol <NSObject>3//协议中不能声明成员变量,只有方法4//{5//int _a;6//}7//协议中声明方法,默认是required8-(void)test1;9-(void)test2;10//@required表明方法是必须要实现的11@required12-(void)test3;13//@optional表明方法是可选的(可以实现也可以不实现)14@optional15-(void)test4;16@end

2、定义一个Person类 在.h文件中使用协议MyProtocol 例如:

1#import <Foundation/Foundation.h>2#import"MyProtocol.h"3@interface Person : NSObject<MyProtocol>4@property(nonatomic,copy)NSString *name;5-(void)print;6@end

3、在Person类的.m文件中实现协议方法 例如:

1#import"Person.h"2@implementation Person3-(void)print4{5NSLog(@"person:%@",self.name);6}7//实现协议中规定的方法8-(void)test19{10NSLog(@"test1");11}12-(void)test213{1415}16-(void)test317{1819}2021@end

4、在main文件中执行方法 例如:

1Person *p1=[[Person alloc]init];2//判断p1所属的类是否遵守了协议3if([p1 conformsToProtocol:@protocol(MyProtocol)]){4//判断p1所属的类是否实现了方法5if([p1 respondsToSelector:@selector(test1)]){6[p1 test1];7}8}910NSObject *obj1=[[NSObject alloc]init];11obj1=nil;12NSObject *obj2=@"hello";13obj2=nil;14//对obj3指向的对象做一个限制15NSObject<MyProtocol> *obj3=@"abc";16//obj4可以指向任意类型的对象,但是必须遵守MyProtocol协议17id<MyProtocol> obj4=[[Person alloc]init];18Person<MyProtocol> *obj5=[[Person alloc]init];

10)OC中没有多继承,但可以通过协议实现,可通过使用多个协议来实现类似多继承的方法。

11)协议主要用来统一规范接口;统一接口的方法:继承和协议

12)协议与继承的区别

1、继承也可以统一规范接口:子类继承父类所有的方法(可以不用重写,除非父类的方法不适合子类),

重写后的方法名与父类一样,达到了统一接口的目的;子类中可以增加成员变量

2、协议:一个类遵守协议,类就具有协议中所有的方法,如果多个类都遵守同一个协议,这些类都有协议

中规范的方法,达到了统一接口的目的;协议中不能有成员变量

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
© 2005- 王朝網路 版權所有 導航