protocol 和 delegate
步骤
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的更多相关文章
- 传参方法:sharedApplication, NSUserDefaults, protocol 和 delegate(实例)
本文转载至 http://blog.csdn.net/learnios/article/details/8442201 分类: 功能模块2012-12-27 10:22 109人阅读 评论(0) 收 ...
- 简单例子让你很好的理解:协议与委托 (Protocol and Delegate)
1 协议: 协议,类似于Java或C#语言中的接口,它限制了实现类必须拥有哪些方法. 它是对对象行为的定义,也是对功能的规范. 示例: 1 2 3 4 5 6 7 8 9 // GoodChild.h ...
- ios回调函数的标准实现:protocol+delegate
一.项目结构
- Protocol and Delegate协议和代理
1.什么是协议? OC协议仿照Java的接口.协议和接口,都是不同类的对象之间一种通信的机制.2.协议的基础语法 单纯的语言描述协议的语法,很难让人理解,主要因为在OC中协议是类对象的通信机制,他 ...
- Protocol and Delegate
为什么使用委托? 答:比如,我上班的工作主要内容包括 (1)写代码(2)写文档(3)测试程序(4)接电话(5)会见客户 (1)(2)我自己全权负责,但是后面(3)(4)(5)我不想或者不方便自己做,所 ...
- IOS开发之----协议与委托(Protocol and Delegate) 实例解析
1 协议: 协议,类似于Java或C#语言中的接口,它限制了实现类必须拥有哪些方法. 它是对对象行为的定义,也是对功能的规范. 在写示例之前我给大家说下@required和@optional这两个关键 ...
- iOS开发之protocol和delegate
protocol--协议 协议是用来定义对象的属性,行为和用于回调的. 协议中有两个keyword@private和@optional,@private表示使用这个协议必需要写的方法,@op ...
- protocol 和delegate(协议和代理)的区别
定义 protocol:中文叫协议,一个只有方法体(没有具体实现)的类,Java中称作接口,实现协议的类必须实现协议中@required标记的方法(如果有的话): delegate:中文叫代理或委托, ...
- Protocol, Delegate
协议的构成: 协议:用来指定代理双方可以做什么,必须做什么. 代理:根据指定的协议,完成委托方需要实现的功能. 委托:根据指定的协议,指定代理去完成什么功能. 协议的修饰符: 协议有两个修饰符@opt ...
随机推荐
- POJ 1113 Wall【凸包周长】
题目: http://poj.org/problem?id=1113 http://acm.hust.edu.cn/vjudge/contest/view.action?cid=22013#probl ...
- 1.设计模式-------Iterator
本文主要是参考<图解设计模式>写的读书笔记: 开发中我用到遍历集合时候,无非我常用的就是简单的for循环,foreach,iterator 这三种方式进行遍历! 当然这三种的效率: 学习I ...
- WIn10远程:mstsc:出现身份验证错误,要求的函数不支持, 这可能是由于CredSSP加密Oracle修正
a.单击 开始 > 运行,输入 regedit,单击 确定. b.定位到 HKLM\Software\Microsoft\Windows\CurrentVersion\Policies\Syst ...
- python2 生成验证码图片
使用pillow或者pil库编写 #coding:utf-8 #use pillow or pil try: from PIL import Image, ImageDraw, ImageFont, ...
- vmware虚拟机安装MAC OSX10.10Yosemite简要记录
vmware所在环境为win7 64位系统,intel4核CPU,16G内存. 本人安装的是OSX10.10Yosemite的CDR镜像. 1. 在服务中停止所有vmware服务. 2. 安装unlo ...
- 《程序员代码面试指南》第三章 二叉树问题 遍历二叉树的神级方法 morris
题目 遍历二叉树的神级方法 morris java代码 package com.lizhouwei.chapter3; /** * @Description:遍历二叉树的神级方法 morris * @ ...
- 第一篇 css导入方式 及选择器
一 推荐资料 推荐书籍 css Zen Garden 中文(css禅意花园) 二.css样式 1.css样式表特征 继承性 大多数css的样式规则可以被继承 层叠性 1)可以定义 多个样式 2)不冲 ...
- NetBeans字体设置
01.找到自己java字体目录.我的目录是[C:\Program Files\Java\jdk1.7.0_21\jre\lib] 02.复制fontconfig.properties.src, 重命名 ...
- Logstash添加Protobuf解析插件
logstash收集日志时,日志部分是由google的protobuf工具打印的,直接利用json解析会造成部分无法解析的问题 搜索后发现有个logstash的protobuf插件 在logstash ...
- Eclipse安装Propedit插件、SVN插件、js插件
1.在线安装Propedit 打开Eclipse的在线安装界面,点击Add Name: propedit Location:http://propedit.sourceforge.jp/eclipse ...