六、协议(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. JS学习笔记(一)DOM事件和监听

    将事件绑定到元素身上的三种方法: 1.HTML事件处理程序(不推荐使用) 1 <a onclick="hide()"> 2.传统的DOM事件处理程序 即在目标DOM事件 ...

  2. 2017-2018-1 20179202《Linux内核原理与分析》第十一周作业

    Metasploit实现木马生成.捆绑.免杀 1.预备知识 (1)Metasploit Metasploit是一款开源的安全漏洞检测工具,全称叫做The Metasploit Framework,简称 ...

  3. Android手机系统设置页面跳转

    android.provider.Settings. 1.   ACTION_ACCESSIBILITY_SETTINGS :    // 跳转系统的辅助功能界面 Intent intent = ne ...

  4. scp和rsync的区别和常用参数

    一.scp 命令 1.scp 是 secure copy 的缩写,用于远程的文件的复制. 2.参数: -r: 递归复制整个目录. 3.实例: scp /home/space/music/1.mp3 u ...

  5. 使用easypoi导出excel

    EasyPOI是在jeecg的poi模块基础上,继续开发独立出来的,可以说是2.0版本,EasyPoi封装的目的和jeecg一致,争取让大家write less do more ,在这个思路上easy ...

  6. redis 发布/订阅 模式

    发布/订阅模式的命令如下: * 进入发布订阅模式的客户端,不能执行除发布订阅模式以上命令的其他命令,否则出错.

  7. 1007 Maximum Subsequence Sum (25)(25 point(s))

    problem Given a sequence of K integers { N~1~, N~2~, ..., N~K~ }. A continuous subsequence is define ...

  8. Vue methods和computed

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  9. Mysql 千万级快速查询|分页方案

    1.简单的 直接查主键id SELECT id FROM tblist WHERE LIMIT 500000,10 2对于有where 条件,又想走索引用limit的,必须创建一个索引,将where  ...

  10. play framework系列之打包war

    概览 Play framwork 是我们一直在使用的框架,从刚开始的简单使用,乱起八糟的jar包引用,项目组成员之间的下载项目之后的引用问题等,遇到各种问题,我都一一解决,我将在这个系列中奉上解决方案 ...