六、协议(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. HTTP上传大文件的节点配置

    <system.web> <compilation debug="true" targetFramework="4.0" /> < ...

  2. C语言可变参数个数

    #include <stdio.h>#include <stdarg.h> void test(const char * format, ...); int main(void ...

  3. 9-4 Unidirectional TSP uva116 (DP)

    题意:给一个n行m列矩阵    从第一列任意一个位置出发 每次往右 右上 右下三个方向走一格 直到最后一列   输出所类和的最小值和路径!! 最小值相同则输出字典序最小路径 很像一开始介绍的三角形dp ...

  4. (转)最短路算法--Dijkstra算法

    转自:http://blog.51cto.com/ahalei/1387799         上周我们介绍了神奇的只有五行的Floyd最短路算法,它可以方便的求得任意两点的最短路径,这称为“多源最短 ...

  5. leetcode easy problem set

     *勿以浮沙筑高台* 持续更新........     题目网址:https://leetcode.com/problemset/all/?difficulty=Easy 1. Two Sum [4m ...

  6. 复杂密码生成工具apg

    复杂密码生成工具apg   密码是身份认证的重要方式.由于密码爆破方式的存在,弱密码非常不安全.为了构建复杂密码,Kali Linux预置了一个复杂密码生成工具apg.该工具可以提供可读密码和随机字符 ...

  7. bzoj 4242 水壶 (多源最短路+最小生成树+启发式合并)

    4242: 水壶 Time Limit: 50 Sec  Memory Limit: 512 MBSubmit: 1028  Solved: 261[Submit][Status][Discuss] ...

  8. 【SPFA】POJ1860-Currency Exchange

    [题目大意] 给出每两种货币之间交换的手续费和汇率,求出从当前货币s开始交换,能否赚. [思路] 反向运用SPFA,判断是否有正环.每次队首元素出队之后,判断一下到源点s的距离是否增大,增大则返回tr ...

  9. [CC-MCHEF]MasterChef

    [CC-MCHEF]MasterChef 题目大意: \(n(n\le10^5)\)片花,第\(i\)片花的美观度为\(b_i(|b_i|\le10^9)\).总体美观度为各片花的美观度之和. 由于有 ...

  10. bzoj 2011

    决策单调性,对于一个1D/1D(状态是一维,转移也是一维)的DP,如果DP的决策具有单调性,那么就可以做到O(nlogn)的复杂度完成DP. 感谢<1D/1D  动态规划优化初步>的作者. ...