步骤

1、发出协议(在发协议者.h文件 下@interface-@end 上边)

@protocol hireOneMaid <NSObject>

@required//必须要实现的方法(默认)

//打扫房间

- (void)cleanHouse;

//照看孩子

- (void)lookayMyBaby;

//给我做饭

- (void)cookWithName:(NSString *)name;

@optional//可以实现,也可以实现

@end

@protocol married <NSObject>

//必须是女的,而且有一个年龄范围

- (void)yourAgeIdForMe:(int)age;

@end

2、谁遵守协议,需要实现@required的必须方法

1、在其.h文件中

//可以遵守多分协议

@interface Maid : NSObject<hireOneMaid , married>

2 、在.m文件中 实现@repuired方法

@implementation Maid

//打扫房间

- (void)cleanHouse

{

NSLog(@"我会打扫房间");

}

//照看孩子

- (void)lookayMyBaby

{

NSLog(@"照看孩子有一套方法");

}

//给我做饭

- (void)cookWithName:(NSString *)name

{

NSLog(@"正在做%@" , name);

}

- (void)yourAgeIdForMe:(int)age

{

NSLog(@"哦现在%d ,我神剑多值" , age);

}

@end

3 、发协议者声明代理

@interface Host : NSObject

//让主人拿出一个雇保姆代理

@property (nonatomic , assign) id<hireOneMaid> maidDelegate;

//让主人拿出一个征婚代理

@property (nonatomic , assign) id<married> marryDelegate;

@end

4、声明 实现方法

1 、在.h 声明

//保姆协议应完成的事情

//房间脏了,让代理去打扫

- (void)houseDiety;

//baby哭了,让代理去照顾

- (void)babyCry;

//我饿了,让代理去作饭

- (void)hungry;

//征婚协议应该完成的事情

//想起我的女朋友了,你多大了

- (void)missMyGirlFriend;

2、在.m实现

//保姆协议应完成的事情

//房间脏了,让代理去打扫

- (void)houseDiety

{

//如果我的代理实现了看孩子的方法

if ([_maidDelegate respondsToSelector:@selector(cleanHouse)]) {

[_maidDelegate cleanHouse];

}

}

//baby哭了,让代理去照顾

- (void)babyCry

{

if ([_maidDelegate respondsToSelector:@selector(lookayMyBaby)]) {

[_maidDelegate lookayMyBaby];

}

}

//我饿了,让代理去作饭

- (void)hungry

{

if ([_maidDelegate respondsToSelector:@selector(cookWithName:)]) {

[_maidDelegate cookWithName:@"西红柿鸡蛋面"];

}

}

//征婚协议应该完成的事情

//想起我的女朋友了,你多大了

- (void)missMyGirlFriend

{

if ([_marryDelegate respondsToSelector:@selector(yourAgeIdForMe:)]) {

[_marryDelegate yourAgeIdForMe:18];

}

}

5 、在main.m创建对象并实现

1、创建一个主人对象

Host *host = [[Host alloc] init];

2、创建两个保姆对象

Maid *maid1 = [[Maid alloc] init];

Maid *maid2 = [[Maid alloc] init];

创建一个woman

Woman *woman1 = [[Woman alloc] init];

3、主人开始选人

//主人把代理给哪一个保姆

host.maidDelegate = maid1;

//让woman1做征婚代理

host.marryDelegate = woman1;

host.marryDelegate = maid1;

4、主人说,保姆做

[host babyCry];

[host houseDiety];

[host hungry];

[host missMyGirlFriend];

protocol 和 delegate的更多相关文章

  1. 传参方法:sharedApplication, NSUserDefaults, protocol 和 delegate(实例)

    本文转载至  http://blog.csdn.net/learnios/article/details/8442201 分类: 功能模块2012-12-27 10:22 109人阅读 评论(0) 收 ...

  2. 简单例子让你很好的理解:协议与委托 (Protocol and Delegate)

    1 协议: 协议,类似于Java或C#语言中的接口,它限制了实现类必须拥有哪些方法. 它是对对象行为的定义,也是对功能的规范. 示例: 1 2 3 4 5 6 7 8 9 // GoodChild.h ...

  3. ios回调函数的标准实现:protocol+delegate

    一.项目结构

  4. Protocol and Delegate协议和代理

    1.什么是协议?  OC协议仿照Java的接口.协议和接口,都是不同类的对象之间一种通信的机制.2.协议的基础语法  单纯的语言描述协议的语法,很难让人理解,主要因为在OC中协议是类对象的通信机制,他 ...

  5. Protocol and Delegate

    为什么使用委托? 答:比如,我上班的工作主要内容包括 (1)写代码(2)写文档(3)测试程序(4)接电话(5)会见客户 (1)(2)我自己全权负责,但是后面(3)(4)(5)我不想或者不方便自己做,所 ...

  6. IOS开发之----协议与委托(Protocol and Delegate) 实例解析

    1 协议: 协议,类似于Java或C#语言中的接口,它限制了实现类必须拥有哪些方法. 它是对对象行为的定义,也是对功能的规范. 在写示例之前我给大家说下@required和@optional这两个关键 ...

  7. iOS开发之protocol和delegate

     protocol--协议 协议是用来定义对象的属性,行为和用于回调的.     协议中有两个keyword@private和@optional,@private表示使用这个协议必需要写的方法,@op ...

  8. protocol 和delegate(协议和代理)的区别

    定义 protocol:中文叫协议,一个只有方法体(没有具体实现)的类,Java中称作接口,实现协议的类必须实现协议中@required标记的方法(如果有的话): delegate:中文叫代理或委托, ...

  9. Protocol, Delegate

    协议的构成: 协议:用来指定代理双方可以做什么,必须做什么. 代理:根据指定的协议,完成委托方需要实现的功能. 委托:根据指定的协议,指定代理去完成什么功能. 协议的修饰符: 协议有两个修饰符@opt ...

随机推荐

  1. Netty 高并发 (长文)

    目录 Netty+Zookeeper 亿级 高并发实战 (长文) 写在前面 1. 高并发IM架构与部分实现 1.1. 高并发的学习和应用价值 1.1.1. 高并发IM实战的价值 1.1.2. 高并发I ...

  2. MySQL登陆数据库

    下面是几种登陆到MySql数据库的登陆方式代码 1mysql -u root -ppassword 2.mysql -u root -p Enter password:password3.mysql ...

  3. MAC 脚本批量启动应用

    1.touch batchStart.sh 2. #!/bin/bash cd /xxx open 1.app open 2.app 3.chmod +x batchStart.sh 4.ok

  4. hibernate Session的CRUD操作

    使用Session里面的方法进行CRUD操作 (1) 增加 save 方法 (2) 查找 get 方法(根据id查) (3) 修改 update 方法 (4) 删除 delete 方法 1.增加 /* ...

  5. python3里面的图片处理库 pillow

    在python2下用pil,而在python3下可以安装pillow 功能,在图片上加上几个字 #coding: utf-8 myPath = "./" fontPath = &q ...

  6. platform-tools

    platform-tools包含开发app的平台依赖的开发和调试工具,包括 adb.fastboot等 android sdk里的各目录作用 AVD Manager.exe:虚拟机管理工具,用于建立和 ...

  7. 让input表单输入框不记录输入过信息的方法

    有过表单设计经验的朋友肯定知道,当我们在浏览器中输入表单信息的时候,往往input文本输入框会记录下之前提交表单的信息,以后每次只要双击input文本输入框就会出现之前输入的文本,这样有时会觉得比较方 ...

  8. Python OOP(2)-static method,class method and instance method

    静态方法(Static Method): 一种简单函数,符合以下要求: 1.嵌套在类中. 2.没有self参数. 特点: 1.类调用.实例调用,静态方法都不会接受自动的self参数. 2.会记录所有实 ...

  9. Data Structure Trie: suffix problem

    http://www.geeksforgeeks.org/suffix-array-set-1-introduction/ http://www.geeksforgeeks.org/pattern-s ...

  10. 【leetcode刷题笔记】Scramble String

    Given a string s1, we may represent it as a binary tree by partitioning it to two non-empty substrin ...