Objective-C:协议protocol
六、协议(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的更多相关文章
- iOS阶段学习第19天笔记(协议-Protocol)
iOS学习(OC语言)知识点整理 一.关于协议(Protocol)的介绍 1)概念:协议指多个对象之间协商的一个接口对象,协议提供了一些方法用在协议的实现者和代理者 之间通讯的一种方式 2) ...
- OC基础--分类(category) 和 协议(protocol)
OC 中的category分类文件相当于 C#中的部分类:OC 中的protocol协议文件(本质是头文件)相当于 C#中的接口.今天就简单说明一下OC中的这两个文件. 由于视频中的Xcode版本低, ...
- 协议Protocol
1.协议:是一组声明方法的集合,不能声明成员变量,作用类似于接口. 遵守此协议的类就相当于拥有了这个协议的所有方法的声明,如果父类遵守了某个协议,子类也遵守了这个协议. ...
- 浅谈iOS开发的协议(protocol)和代理(delegate)
协议和代理对于一个新手来说确实不讨好理解,也有很多的iOS开发的老手对此是懂非懂的.网上的很多博文只是讲了怎么使用,并没有说的很明白.下面我谈一下我的理解. 1.你要先搞明白,协议和代理为什么会出现, ...
- 关于ios object-c 类别-分类 category 的静态方法与私有变量,协议 protocol
关于ios object-c 类别-分类 category 的静态方法与私有变量,协议 protocol 2014-02-18 19:57 315人阅读 评论(0) 收藏 举报 1.category, ...
- Objective-C中的协议(Protocol)和类别(Category)
1.什么是协议? 2.协议与类别的声明和使用 1.什么是协议? 在Objective-C中,不支持多继承,即不允许一个类有多个父类,但是OC提供了类似的实现方法,也就是协议.协议有点类似于Java里的 ...
- Objective-C 中的协议(@protocol)和接口(@interface)的区别
Objective-C 中的协议(@protocol),依照我的理解,就是C#, Java, Pascal等语言中的接口(Interface).协议本身不实现任何方法,只是声明方法,使用协议的类必须实 ...
- Objective-C:继承、分类(Category、extension)、协议(protocol),个人理解,仅供参考
总结:继承.分类(Category.extension).协议(protocol) 一.继承: (1)特点: 继承多用于一般父类中的方法功能比较齐全,子类从父类继承过来使用,可以省略很多重复的代码 ...
- 协议(Protocol)与委托代理(Delegate)
协议(Protocol)的作用: 1. 规范接口,用来定义一套公用的接口: 2. 约束或筛选对象. 代理(Delegate): 它本身是一种设计模式,委托一个对象<遵守协议>去做某件事情, ...
随机推荐
- 移动端自动化测试(二)之 Appium常用的API(python)函数介绍
上一章节已经介绍了Appium的环境搭建,其实只要掌握了Appium的工作原理,前期的准备工作和安装过程是比较简单的.那么当我们搭建好Appium环境后接下来做些什么呢?通常思路是开始appium的第 ...
- File.separator与 \分隔符
在Windows下的路径分隔符和Linux下的路径分隔符是不一样的,当直接使用绝对路径时,跨平台会暴出“No such file or diretory”的异常. 比如说要在temp目录下建立一个te ...
- web到service简单原理例子
这是目前的理解 附上服务端源码 package com.lsw.server; import java.io.*; import java.net.*; import java.util.HashMa ...
- 一、redis系列之基础知识与centos下环境搭建
1. Redis 与其他 key - value 缓存产品有以下三个特点: Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用. Redis不仅仅支持简单的ke ...
- mmcrfs
mmcrfs command Creates a GPFS™ file system. Synopsis mmcrfs Device {"DiskDesc[;DiskDesc...]&quo ...
- 验证码60s倒计时前端效果
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Django的orm中get和filter的不同
Django的orm框架对于业务复杂度不是很高的应用来说还是不错的,写起来很方面,用起来也简单.对于新手来说查询操作中最长用的两个方法get和filter有时候一不注意就会犯下一些小错误.那么今天就来 ...
- JavaSE基础之封装
JavaSE基础之封装 一.Java中的封装 1.字面意思: 包装: 2.专业含义: 面向对象的三大特征之一: 指的是将对象的状态信息隐藏在对象内部,不允许外部程序直接访问对象内部信息,而是通过该类所 ...
- 【MPI】并行奇偶交换排序
typedef long long __int64; #include "mpi.h" #include <cstdio> #include <algorithm ...
- 【洛谷】NOIP提高组模拟赛Day1【组合数学】【贪心+背包】【网络流判断是否满流以及流量方案】
U41568 Agent1 题目背景 2018年11月17日,中国香港将会迎来一场XM大战,是世界各地的ENLIGHTENED与RESISTANCE开战的地点,某地 的ENLIGHTENED总部也想派 ...