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): 它本身是一种设计模式,委托一个对象<遵守协议>去做某件事情, ...
随机推荐
- 收集Nginx的json格式日志(五)
一.配置nginx [root@linux-node1 ~]# vim /etc/nginx/nginx.conf #修改日志格式为json格式,并创建一个nginxweb的网站目录 log_form ...
- mysql 判断两个字符串是否存在包含关系-------(1,2,3)与(2,3)
1.这里这个是目前有问题的 #创建FUNCTION DELIMITER ; CREATE FUNCTION `is_mixed`(str1 TEXT, str2 TEXT) RETURN ...
- ecshop,大商创后台设置增加字段方法
使用场景:在开发过程中有时是需要在后台增加一个参数 例如: 必须要改数据库和源码的 1,在数据库中增加一条数据 数据库名称:shop_config 2:后台语言包
- poj1730 - Perfect Pth Powers(完全平方数)(水题)
/* 以前做的一道水题,再做精度控制又出了错///... */ 题目大意: 求最大完全平方数,一个数b(不超过int范围),n=b^p,使得给定n,p最大: 题目给你一个数n,求p : 解题思路: 不 ...
- 深度学习常用数据集 API(包括 Fashion MNIST)
基准数据集 深度学习中经常会使用一些基准数据集进行一些测试.其中 MNIST, Cifar 10, cifar100, Fashion-MNIST 数据集常常被人们拿来当作练手的数据集.为了方便,诸如 ...
- C# Zip解压缩,规避 [content_types].xml 文件
使用 System.IO.Packaging.Package 进行压缩和解压时,会自动生成 [content_types].xml 文件. The Structure of the [Content_ ...
- 【面试总结】网易2019秋招一站式面试总结(等offer中……)
岗位:运维工程师(网易杭州) 面试时间:一天 上午十一点二十,准时开启面试,初面面试官是个看起来就像是主管的人,厚实的身体,中气浑厚的声音,整齐朴素的衬衫. 简要问题摘录如下:(后续补充答案内容) 1 ...
- firewalld启动问题
问题 在查看或启动firewalld服务时,提示"Warning: firewalld.service changed on disk. Run 'systemctl daemon-relo ...
- CSUOJ 1217 奇数个的那个数 位运算
Description 给定些数字,这些数中只有一个数出现了奇数次,找出这个数. Input 每组数据第一行n表示数字个数,1 <= n <= 2 ^ 18 且 n % 2 == 1. 接 ...
- String 与不可变对象
什么是不可变对象 ?不可变对象指的是在创建一个对象之后 ,不能再改变它的状态 ,那么这个对象就是不可变的 .不能改变状态的意思是 ,不能改变对象内的成员变量 ,包括基本数据类型的值不能改变 ,引用类型 ...