六、协议(protocol)

关键字:@optional、@required

(1)是一个类共享的一个方法列表

(2)它声明了一系列的方法而不进行实现

(3)遵从某个协议,就是需要实现协议中的方法

(4)类似于java的接口、C++中的纯虚函数

非正式协议、正式协议

重点:正式协议:所有实现正式协议的类, 都必须实现该协议中的所有方法

一个类可以实现任意多个协议

协议其实就是代理模式:自己不亲自做,让别人去做,遵循了协议的类,可以成为别的类的代理。

-----------------------------------------------------------------------------------------------------------------------------------------------------

//Boos类,制定委托协议并选择委托人(Boos有些事可以自己做,但是有些事需要委托人去做,例如秘书帮助老板去买票、订房、通知开会的人)

 //  Boos.h
// 04-Delegate
//
// Created by ma c on 15/8/12.
// Copyright (c) 2015年. All rights reserved.
// #import <Foundation/Foundation.h>
@protocol BossDeledate
-(void)bookTicket;
-(void)bookRoom;
-(void)notify;
@end
@interface Boos : NSObject
@property(nonatomic,weak)id<BossDeledate> delegate;
-(void)travel;
-(void)meeting;
@end
 //  Boos.m
// 04-Delegate
//
// Created by ma c on 15/8/12.
// Copyright (c) 2015年. All rights reserved.
// #import "Boos.h" @implementation Boos
-(void)travel
{
//1、订机票
[_delegate bookTicket];
//2、订酒店
[_delegate bookRoom];
//3、去出差
NSLog(@"Boss travel");
}
-(void)meeting
{
//1、通知开会的所有人
[_delegate notify];
//2、讲话
NSLog(@"Boss talk");
}
@end

//选取person作为委托人

 //  Person.h
// 04-Delegate
//
// Created by ma c on 15/8/12.
// Copyright (c) 2015年. All rights reserved.
// #import <Foundation/Foundation.h>
#import "Boos.h"
@interface Person : NSObject<BossDeledate> @end
 //  Person.m
// 04-Delegate
//
// Created by ma c on 15/8/12.
// Copyright (c) 2015年 bjsxt. All rights reserved.
// #import "Person.h" @implementation Person
-(void)bookTicket
{
NSLog(@"person book ticket");
}
-(void)bookRoom
{
NSLog(@"person book room");
}
-(void)notify
{
NSLog(@"person notify all people meeting!");
}
@end

//还可以选取Student作为代理人

 //  Student.h
// 04-Delegate
//
// Created by ma c on 15/8/12.
// Copyright (c) 2015年. All rights reserved.
// #import <Foundation/Foundation.h>
#import "Boos.h"
@interface Student : NSObject <BossDeledate> @end
 //  Student.m
// 04-Delegate
//
// Created by ma c on 15/8/12.
// Copyright (c) 2015年 bjsxt. All rights reserved.
// #import "Student.h" @implementation Student
-(void)bookTicket
{
NSLog(@"student book ticket");
}
-(void)bookRoom
{
NSLog(@"student book room");
}
-(void)notify
{
NSLog(@"student notify all people meeting!");
}
@end

//测试代理人

 //  main.m
// 04-Delegate
//
// Created by ma c on 15/8/12.
// Copyright (c) 2015年. All rights reserved.
// #import <Foundation/Foundation.h>
#import "Boos.h"
#import "Person.h"
#import "Student.h"
int main(int argc, const char * argv[])
{
@autoreleasepool
{
//测试代理模式
Boos *boss = [[Boos alloc]init];
Person *person = [[Person alloc]init];
Student *student = [[Student alloc]init]; //老板设置代理
[boss setDelegate:person]; [boss meeting];
[boss travel]; //老板重新选择学生作为代理人
[boss setDelegate:student]; [boss meeting];
[boss travel];
}
return ;
}

//运行结果

-- ::23.663 -Delegate[:] person notify all people meeting!
-- ::23.664 -Delegate[:] Boss talk
-- ::23.664 -Delegate[:] person book ticket
-- ::23.665 -Delegate[:] person book room
-- ::23.665 -Delegate[:] Boss travel
-- ::23.665 -Delegate[:] student notify all people meeting!
-- ::23.665 -Delegate[:] Boss talk
-- ::23.665 -Delegate[:] student book ticket
-- ::23.665 -Delegate[:] student book room
-- ::23.666 -Delegate[:] Boss travel
Program ended with exit code:

Objective-C:协议protocol的更多相关文章

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

    iOS学习(OC语言)知识点整理 一.关于协议(Protocol)的介绍 1)概念:协议指多个对象之间协商的一个接口对象,协议提供了一些方法用在协议的实现者和代理者      之间通讯的一种方式 2) ...

  2. OC基础--分类(category) 和 协议(protocol)

    OC 中的category分类文件相当于 C#中的部分类:OC 中的protocol协议文件(本质是头文件)相当于 C#中的接口.今天就简单说明一下OC中的这两个文件. 由于视频中的Xcode版本低, ...

  3. 协议Protocol

    1.协议:是一组声明方法的集合,不能声明成员变量,作用类似于接口.           遵守此协议的类就相当于拥有了这个协议的所有方法的声明,如果父类遵守了某个协议,子类也遵守了这个协议.       ...

  4. 浅谈iOS开发的协议(protocol)和代理(delegate)

    协议和代理对于一个新手来说确实不讨好理解,也有很多的iOS开发的老手对此是懂非懂的.网上的很多博文只是讲了怎么使用,并没有说的很明白.下面我谈一下我的理解. 1.你要先搞明白,协议和代理为什么会出现, ...

  5. 关于ios object-c 类别-分类 category 的静态方法与私有变量,协议 protocol

    关于ios object-c 类别-分类 category 的静态方法与私有变量,协议 protocol 2014-02-18 19:57 315人阅读 评论(0) 收藏 举报 1.category, ...

  6. Objective-C中的协议(Protocol)和类别(Category)

    1.什么是协议? 2.协议与类别的声明和使用 1.什么是协议? 在Objective-C中,不支持多继承,即不允许一个类有多个父类,但是OC提供了类似的实现方法,也就是协议.协议有点类似于Java里的 ...

  7. Objective-C 中的协议(@protocol)和接口(@interface)的区别

    Objective-C 中的协议(@protocol),依照我的理解,就是C#, Java, Pascal等语言中的接口(Interface).协议本身不实现任何方法,只是声明方法,使用协议的类必须实 ...

  8. Objective-C:继承、分类(Category、extension)、协议(protocol),个人理解,仅供参考

    总结:继承.分类(Category.extension).协议(protocol)   一.继承: (1)特点: 继承多用于一般父类中的方法功能比较齐全,子类从父类继承过来使用,可以省略很多重复的代码 ...

  9. 协议(Protocol)与委托代理(Delegate)

    协议(Protocol)的作用: 1. 规范接口,用来定义一套公用的接口: 2. 约束或筛选对象. 代理(Delegate): 它本身是一种设计模式,委托一个对象<遵守协议>去做某件事情, ...

随机推荐

  1. shuffle过程分析

    shuffle的过程分析 shuffle阶段其实就是之前<MapReduce的原理及执行过程>中的步骤2.1.多个map任务的输出,按照不同的分区,通过网络copy到不同的reduce节点 ...

  2. Winsock—I/O模型之选择模型(一)

    Winsock中提供了一些I/O模型帮助应用程序以异步方式在一个或多个套接字上管理I/O. 这样的I/O模型有六种:阻塞(blocking)模型,选择(select)模型,WSAAsyncSelect ...

  3. SQL Server 跨服务器快速数据转移

    最近遇到一个问题,要将 a 服务器上的 A 库,迁移到 b 服务器上的 B 库,两个库的数据结构是一样的,但是数据库版本是 a 比 b 高,通过 sqlserver  还原这条路是走不通了,那难道除了 ...

  4. ZOJ 4010 Neighboring Characters(ZOJ Monthly, March 2018 Problem G,字符串匹配)

    题目链接  ZOJ Monthly, March 2018 Problem G 题意  给定一个字符串.现在求一个下标范围$[0, n - 1]$的$01$序列$f$.$f[x] = 1$表示存在一种 ...

  5. Spring 单例 httprequest 线程安全

    @Autowired HttpServletRequest之所以线程安全是因为, httpsevletRequest 储存在 RequestContextHolder中. 每次http请求的doXXX ...

  6. HDU - 1022 Train Problem I STL 压栈

    Train Problem I Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) ...

  7. Logback配置解析

    logback优点 比较吸引的几个优点如下: 内核重写,初始化内存加载更小 文档比较齐全 支持自动重新加载配置文件,扫描过程快且安全,它并不需要另外创建一个扫描线程 支持自动去除旧的日志文件,可以控制 ...

  8. [BZOJ5306][HAOI2018]染色(容斥+FFT)

    https://www.cnblogs.com/zhoushuyu/p/9138251.html 注意如果一开始F(i)中内层式子中j枚举的是除前i种颜色之外还有几种出现S次的颜色,那么后面式子就会难 ...

  9. POJ 1469 COURSES 二分图最大匹配 二分图

    http://poj.org/problem?id=1469 这道题我绝壁写过但是以前没有mark过二分图最大匹配的代码mark一下. 匈牙利 O(mn) #include<cstdio> ...

  10. git一些命令

    ************git基本命令***************git config --global user.name "xielehe" 设置名字git config - ...