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

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 //协议中声明方法,默认是required
 8 -(void)test1;
 9 -(void)test2;
10 //@required表明方法是必须要实现的
11 @required
12 -(void)test3;
13 //@optional表明方法是可选的(可以实现也可以不实现)
14 @optional
15 -(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 Person
 3     -(void)print
 4     {
 5      NSLog(@"person:%@",self.name);
 6     }
 7     //实现协议中规定的方法
 8     -(void)test1
 9     {
10       NSLog(@"test1");
11     }
12     -(void)test2
13     {
14
15     }
16     -(void)test3
17     {
18
19     }
20
21     @end

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

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

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

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

11)协议与继承的区别
     
    1、继承也可以统一规范接口:子类继承父类所有的方法(可以不用重写,除非父类的方法不适合子类),
         重写后的方法名与父类一样,达到了统一接口的目的;子类中可以增加成员变量
 
    2、协议:一个类遵守协议,类就具有协议中所有的方法,如果多个类都遵守同一个协议,这些类都有协议
         中规范的方法,达到了统一接口的目的;协议中不能有成员变量

时间: 2024-12-15 23:36:26

IOS阶段学习第19天笔记(协议-Protocol)的相关文章

IOS阶段学习第21天笔记(ARC内存管理-Copy-代理)

IOS学习(OC语言)知识点整理 一.OC 中的ARC内存管理 1)ARC中释放对象的内存原则:看这个对象有没有强引用指向它 2)strong:强引用,默认情况下的引用都是强引用 3) weak:弱引用__weak 4)ARC环境下:与内存相关的代码都不能使用了,如果要在ARC环境下使用MRC内存管理代码 如: [super    delloc]  选中项目找到 Build Phases 菜单下的  Compile Sources 项 选中要转换的.m文件, 双击写入此行代码:-fno-objc

iOS阶段学习第29天笔记(UITextField的介绍)

iOS学习(UI)知识点整理 一.关于UITextField的介绍 1)概念: UITextField 是用于接收用户输入的一个控件 2)UITextField  初始化实例代码: 1 //创建一个UItextField实例 2 UITextField *textField = [[UITextField alloc] init]; 3 textField.frame = CGRectMake(10, 40, self.view.frame.size.width - 20, 40); 4 tex

IOS阶段学习第四天笔记(循环)

    IOS学习(C语言)知识点整理笔记 一.分支结构 1.分支结构分为单分支 即:if( ){ } ;多分支 即:if( ){ }else{ }  两种 2.单分支 if表达式成立则执行{ }里的语句:双分支 if表达式不成立 则执行else{ }里面的语句 3.字符串的输出系统会从数组地址一直打印到字符 ‘\0’为止,如果没有正确初始化,可能会打印出数组外的信息 4.如果分支结构里面只有一条执行语句可省略外面的大括号{} . 二.开关语句 1.语句结构 :switch (参数) case

IOS阶段学习第三天笔记(运算符)

                                         IOS学习(C语言)知识点整理笔记 1.运算符 一.算术运算符 1)表达式由变量.常量.运算符构成,有确定的类型和值 2)算术运算符包括: +(加),-(减),*(乘),/(除),%(模) 3)算术运算符优先级 括号()> * ,/ ,%  >+,- 4)%表示取余.取模  a%b 表示a除以b取余数 5)整数相除保留两位小数处理方法如: printf(“%.2f”,(float)14/9); 6)自增自减运算符

iOS阶段学习第32天笔记(页面传值方法介绍)

iOS学习(UI)知识点整理 一.界面传值方法 1.方法一  Block传值  通过SubView视图的Block向View视图传值改变View视图的背景色 实例代码: 1)SubViewController.h 文件的代码实现 1 #import <UIKit/UIKit.h> 2 @interface SubViewController : UIViewController 3 @property (nonatomic,copy) void(^callback)(UIColor *colo

IOS 阶段学习第24天笔记(Block的介绍)

IOS学习(OC语言)知识点整理 一.Block 的介绍 1)概念: block 是一种数据类型,类似于C语言中没有名字的函数,可以接收参数,也可以返回值与C函数一样被调用 封装一段代码 可以在任何地方调用 block 也可以作为函数参数,以及函数返回值 2)Block 实例代码 1 //定义了一个block类型MyBlock,MyBlock类型的变量只能指向带两个int的参数和返回int的代码块 2 typedef int (^MyBlock)(int,int); 3 //定义一个函数指针 4

IOS 阶段学习第23天笔记(XML数据格式介绍)

IOS学习(OC语言)知识点整理 一.XML数据格式介绍 1)概念:xml是extensible markup language扩展的标记语言,一般用来表示.传输和存储数据 2)xml与json目前使用比较广泛的两种网络传输数据格式 两者分别占比: 1. json:市场上占90%,轻量级的表示数据 2.xml:占10%,表示数据比较复杂 3)XML三种数据解析方法: 1.DOM解析:将整个xml数据加载到内存中,构造一个对象,从根结点开始一级一级的解析提取数据.缺点:如果数据大, 比较占内存,解

IOS阶段学习第18天笔记(归档与解归档操作)

IOS学习(OC语言)知识点整理 一.归档与解归档的操作 1)归档是一个过程,将一个或多个对象存储起来,以便以后可以还原,包括将对象存入文件,以后再读取 将数据对象归档成plist文件 2)plist文件中只能存放:NSString.NSDate.NSNumber.Bool.NSData.NSArray.NSDictionary 并且NSArray和NSDictionary中只能是以上的类型 3)归档存放时数据是什么类型,读取数据时就用什么类型的数据接收. 4)归档不能直接操作自定义对象类型的数

IOS 阶段学习第十天笔记(字符串操作)

IOS学习(C语言)知识点整理 一.字符串的操作 1)字符串的存储,字符数组,在堆里面申请内存空间. 实例代码: #include <stdlib.h> #include <string.h> int main(){ char str[100] = "hello world"; char *p = "hello world"; //*p ='H';//常量字符串不可以修改,p指向只读的地址 p = str; *p = 'H'; // prin