OC基础-protocol

protocol(协议)的声明看起来比较向java中得一个类的接口,但是不同点在于:protocol没有父类也不能定义实例变量.

protocol是一种特殊的程序设计结构,用于声明专门被别的类实现的方法.

常见使用场合:

1.需要由别的类来实现的方法

2.声明未知类的接口

3.两个类之间的通信

protocol的基本特点:

协议可以被任何类实现的方法

协议本身不是类,他是定义了一个其他类可以实现的接口.

类别也可以采用协议(用得不多)

protocol中得关键字:

@required :表示必须强制实现的方法

@optional :表示可以选择实现的方法

//协议的声明
#import
@protocol OneProtocol 

//可以选择实现的方法:
@optional
-(void) optionalMethod1;
-(void) optionalMethod2;
//必须实现的方法:
@required
-(void) requiredMethod1;
@end

示例:模拟一个按钮被点击的情形

// Button.h文件

#import <Foundation/Foundation.h>

// 潜规则:一般来说我们写一个协议通过称它为代理(delegate)

// <>代表是实现某一个协议

@protocol ButtonDelegate <NSObject>

- (void)onClick;

@end

@interface Button :NSobject

//设置按钮Button的监听器delegate

@prooerty (nonatomic ,retain)id<ButtonDelegte>delegate;   //实例变量delegate必须是继承了ButtonDelegate协议的对象才可以成为button的监听器.

//设置一个click函数用来模拟button被点击了

- (void)click;

@end

// Button.m文件

#import "Button.h"

@implementation Button

-(void)click

{

// 当Button被点击时就通知监听器

[_delegate onClick];

}

@end

//创建Button的监听器类,用于监听按钮被点击的事件

//ButtonListener,h文件

#import <Foundation/Foundation.h>

#import "Button.h"

// ButtonListener继承了Button的Buttondelegate协议,必须实现该协议的方法onClick

// Buttonlistener 继承了Buttondelegate协议后,具有了监听Button被点击后的反应功能

@interface ButtonListener :NSObject<ButtonDelegate>

@end

//ButtonListener.m文件

#import "ButtonListener.h"

@implementation ButtonListener

-(void)onClick

{

NSLog(@"按钮被点击了!");

}

@end

写法二:

[

#import <Foundation/Foundation.h>

//在此处不整体导入Button.h文件,对协议进行提前声明,跟@class的用途一致

@protocol ButtonDelegate;

// ButtonListener继承了Button的Buttondelegate协议,必须实现该协议的方法onClick

// Buttonlistener 继承了Buttondelegate协议后,具有了监听Button被点击后的反应功能

@interface ButtonListener :NSObject<ButtonDelegate>

@end

//ButtonListener.m文件

#import "ButtonListener.h"

//在.m文件中导入Button.h文件,用于导入Button.h文件的所有内容,提供协议中得onClick 方法信息.

//方法二种的@protocol的使用参照@class来理解.两者效果和作用一样.

#import "Button.h"

@implementation ButtonListener

-(void)onClick

{

NSLog(@"按钮被点击了!");

}

@end

]

main 函数中的调用:

// 初始化一个按钮

Button *button=[[button alloc]init];

//初始化一个监听器

ButtonListener *listener=[[ButtonListener alloc]init];

//设置按钮的监听器

button.delegate=listener;

[button click];  //触发按钮监听器执行Onclick方法;

//补充完善:上面的onClick虽然可以被多个button对象同时调用,但是并不能区分是谁调用的该函数,所以用以下方法来完善程序.

协议中声明onClick时使用:  -(void)onClick:(Button *)btn

在ButtonListener.m中实现时使用如下方式:

-(void)onClick:(Button *)btn

{

NSLog(@"%@按钮被点击了!",btn);

}

//Button中click的实现方式

-(void)click

{

//如果_delegate监听器实现了onClick:方法就执行该方法

//OC中用一种 [对象名 resondsToSelector:@selector(方法名)] 机制来判断某一个函数是否被实现

if([_delegate resondsToSelector:@selector(onClick:)])

{

[_delegate onClick:self];

}else{

//如果监听器没有实现onClick方法就通知出来

NSLog(@"监听器并没有实现onClick:方法");

}

}

有关protocol的小知识点:

1.一般protocol放在一个单度的文件中,command+N来快速创建该文件

2.在.h中通常使用  @protocol 协议名; 来声明协议,而不是用#import来整体导入protocol ,在使用的时候才用#import来导入协议.(与@class相同)

[email protected]声明方式: @protocol 协议名1,协议名2....   继承时用: <协议名1,协议名2,....>

4.判断某个对象是否遵循某一个协议的方法:BOOL [对象名 conformsToProtocol:@protocol(协议名)]

file:///Users/lanou3g/Desktop/96BA22BB-CFA6-482B-9B93-D722CEF1E840.png

OC基础-protocol

时间: 2024-08-07 08:39:38

OC基础-protocol的相关文章

iOS开发OC基础:Xcode中常见英文总结,OC常见英文错误

在开发的过程中难免会遇到很多的错误,可是当看到系统给出的英文时,又不知道是什么意思.所以这篇文章总结了Xcode中常见的一些英文单词及词组,可以帮助初学的人快速了解给出的提示.多练习,就肯定能基本掌握. expression:表达式assignable:赋值variable:变量redefinition:重复定义type:类型conflicting:冲突项invalid:无效的conversion:转换specifier:说明符indent:缩进operands:运算对象.操作数binary:二

iOS开发OC基础:OC中的协议

1.协议是一种为有源代码的类扩充方法的方式. 2.协议只是一系列方法的生命,就相当于一张任务清单,规定了要做的事情,但是具有的实施(也就是实现),是由服从该协议的类来实现.所以协议只有.h文件,并且不可以定义变量 3.协议的定义是以@protocol开头, + 协议的名字 <>(表示服从的协议)服从的协议写在<>之内,多个协议之间通过逗号来进行分隔,父协议中的内容就相当于子协议也具有这些内容,以@end结束. 下面的附件是协议的一个小例子,可以加深大家对协议的理解,看完之后一定要多

OC基础 代理和协议

OC基础 代理和协议 1.协议 (1)oc语言中得协议:一组方法列表,不需要我们自己实现,由遵守协议的类来实现协议所定制的方法. (2)协议的使用步骤:制定协议-->遵守协议-->实现协议-->调用协议. (3)协议声明的关键字: (a)@required,必须实现,不实现的话在.m文件内会报警告. (b)@optional,可选实现,不实现的话在.m文件内也不会报警告. (4)协议和继承的区别: (a)相同之处:都可以规范统一类中的方法. (b)不同之处:继承的子类不需要再实现一遍父类

oc基础知识(转)

1.项目经验 2.基础问题 3.指南认识 4.解决思路 ios开发三大块: 1.Oc基础 2.CocoaTouch框架 3.Xcode使用 -------------------- CocoaTouch Media Core Services Core OS -------------------- System Framework OC的类声明,定义域 OC关键字定义为  @class O-C特有的语句for(..in ..)迭代循环,其他的条件和循环语句和c一样 OC对面向对象的概述 (1)

OC基础回想(十二)协议

在OC基础(十一)中我们讨论了类别和非正式协议的奇异之处.在使用非正式协议时.能够仅仅实现你想要获得响应的方法.也不必在对象中声明不论什么内容来表示该对象可用作托付对象. 全部这些任务能够用最少的代码完毕. 以下来学习正式协议. 1. 正式协议 与非正式协议一样.正式协议包括了方法和属性的有名称列表. 但与非正式协议不同的是,正式协议须要显示地採用.採用(adopt)协议的办法是在类的@interface声明中列出协议的名称.採用协议后,你的类就要遵守该协议.採用协议就意味着你承诺实现该协议的全

OC基础01

搜索 "==>" 寻找标记 OC基础总结: Objective-C具有相当多的动态特征,如: " 动态类型 , 动态绑定 , 动态加载" ==> copy mutableCopy 浅复制: 在复制操作中,对于被复制的对象的每一层复制都是指针复制. 深复制: 在复制操作中,对于被复制的对象至少有一层是对象复制 完全复制: 在复制操作中,对于被复制的对象的每一层都是对象复制. 一般来讲: 浅复制复制引用对象的指针 深复制 复制引用对象的内容 retain &

黑马程序员--oc基础第八篇

八. oc基础知识(Protocal) protocal 出发点:他仅仅是用来声明方法的. 1. 可以用来声明一大堆方法(但是不能声明成员变量) 2. 只要某个类遵守了这个协议,就相当于拥有这个协议中的所有方法声明 3. 只要父类遵守了某个协议,就相当于子类也遵守了 4. 协议列出了一组方法,有些是必须实现的,有些是选择实现(@optional).遵守协议就要实现协议里面所有必须实现的方法.         1. 定义一个协议 协议格式的编写 @protocol协议名称//为协议起一个有意义的名

OC基础(十二)协议

在OC基础(十一)中我们讨论了类别和非正式协议的奇妙之处.在使用非正式协议时,可以只实现你想要获得响应的方法.也不必在对象中声明任何内容来表示该对象可用作委托对象.所有这些任务可以用最少的代码完成. 下面来学习正式协议. 1. 正式协议 与非正式协议一样,正式协议包含了方法和属性的有名称列表.但与非正式协议不同的是,正式协议需要显示地采用.采用(adopt)协议的办法是在类的@interface声明中列出协议的名称.采用协议后,你的类就要遵守该协议.采用协议就意味着你承诺实现该协议的所有方法.否

四.OC基础--1.文档安装和方法重载,2.self和super&amp;static,3.继承和派生,4.实例变量修饰符 ,5.私有变量&amp;私有方法,6.description方法

四.OC基础--1.文档安装和方法重载, 1. 在线安装 xcode-> 系统偏好设置->DownLoads->Doucument->下载 2. 离线安装 百度xcode文档 3. 方法重载: 是指在一个类中定义多个同名的方法 在OC中没有重载 2.self和super&static, self和super: 1. self理解: 谁调用当前方法, self就代表谁. 比如: 在对象方法中,self代表的是对象, 因为只有对象才可以调用对象方法 在类方法中, self代表的