今天模拟Button的delegate来联系一下protocol。

Button类

//  Button.h
// Protocal
//
// Created by WildCat on 13-7-24.
// Copyright (c) 2013年 wildcat. All rights reserved.
// #import <Foundation/Foundation.h>
@class Button;
//定义一个协议
@protocol ButtonDelegate <NSObject>
-(void)onclick:(Button *) button;
@end
//定义一个类 如果要作为Button的代理一定要实现ButtonDelegate
@interface Button : NSObject
@property (nonatomic,retain) id<ButtonDelegate> delegate; -(void)click;
@end
#import "Button.h"

@implementation Button

-(void)dealloc{

    //释放_gelegate
[_delegate release];
[super dealloc]; } -(void)click{ NSLog(@"调用onclick方法");
[_delegate onclick:self];
}
@end

ButtonListener类

/  ButtonListener.h
// Protocal
//
// Created by WildCat on 13-7-24.
// Copyright (c) 2013年 wildcat. All rights reserved.
// #import <Foundation/Foundation.h>
@protocol ButtonDelegate;
@interface ButtonListener : NSObject <ButtonDelegate> @end
#import "ButtonListener.h"
#import "Button.h"
@implementation ButtonListener
-(void)onclick:(Button *)button{ NSLog(@"Button %@ 被点击",button);
}
@end

主函数:

//
// main.m
// Protocal
//
// Created by WildCat on 13-7-24.
// Copyright (c) 2013年 wildcat. All rights reserved.
// #import <Foundation/Foundation.h>
#import "Button.h"
#import "ButtonListener.h"
int main(int argc, const char * argv[])
{ @autoreleasepool {
Button *button=[[[Button alloc] init] autorelease];
Button *button2=[[[Button alloc] init] autorelease]; ButtonListener *listener=[[[ButtonListener alloc] init] autorelease]; button.delegate=listener;
button2.delegate=listener; [button click];
[button2 click]; }
return 0;
}

运行结果:

2013-07-24 16:49:41.344 Protocal[1380:303] 调用onclick方法

2013-07-24 16:49:41.346 Protocal[1380:303] Button <Button: 0x100109990>
被点击

2013-07-24 16:49:41.347 Protocal[1380:303] 调用onclick方法

2013-07-24 16:49:41.347 Protocal[1380:303] Button <Button: 0x1001099e0>
被点击

Object-c学习之路五(@protocol协议)的更多相关文章

  1. Object C学习笔记15-协议(protocol)

    在.NET中有接口的概念,接口主要用于定义规范,定义一个接口关键字使用interface.而在Object C 中@interface是用于定义一个类的,这个和.NET中有点差别.在Object C中 ...

  2. Python学习之路8☞迭代器协议和生成器

    一 什么是迭代器协议 1.迭代器协议是指:对象必须提供一个next方法,执行该方法要么返回迭代中的下一项,要么就引起一个StopIteration异常,以终止迭代 (只能往后走不能往前退) 2.可迭代 ...

  3. redis——学习之路五(简单的C#使用redis)

    redis官方推荐使用的客户端程序 打星星表示推荐使用的客户端程序,一个笑脸表示最近6个月内有过正式活动的.http://redis.io/clients/#c 从这里我们可以判断官方推荐我们使用Se ...

  4. MongoDB学习之路(五)

    MongoDB $type 操作符 类型 数字 备注 Double 1 String 2 Object 3 Array 4 Binary data 5 Undefined 6 已废弃 Object i ...

  5. Java学习之路(五):常见的对象操作

    Object对象 我们先来介绍一下API API(Application Programming Interface):应用程序编程接口 Java API 就是Java提供给我们使用的类,这些类将底层 ...

  6. zigbee学习之路(五):定时器1(查询方式)

    一.前言 今天,我们来学习几乎所有单片机都有的功能,定时器的使用,定时器对单片机来说是相当重要的,有了它,单片机就可以进行一些复杂的工作. 二.原理与分析 谈到定时器的控制,我们最先想到的是要给它赋初 ...

  7. python学习之路 五:函数式编程

    本节重点 掌握函数的作用.语法 掌握作用域.全局变量与局部变量知识 掌握函数名称空间.闭包 一.函数编程基础知识 1.基本定义 函数是指将一组语句的集合通过一个名字(函数名)封装起来,要想执行这个函数 ...

  8. react.js学习之路五

    最近没时间写博客,但是我一直在学习react,我发现react是一个巨大的坑,而且永远填不完的坑 关于字符串的拼接: 在react中,字符串的拼接不允许出现双引号“” ,只能使用单引号' ',例如这样 ...

  9. 嵌入式Linux驱动学习之路(五)u-boot启动流程分析

    这里说的u-boot启动流程,值得是从上电开机执行u-boot,到u-boot,到u-boot加载操作系统的过程.这一过程可以分为两个过程,各个阶段的功能如下. 第一阶段的功能: 硬件设备初始化. 加 ...

随机推荐

  1. Scriptcase演示程序,现在,他们使用SC多么简单的开发系统

    Scriptcase它内置了一批成熟的业务系统,我们的系统的一部分已经完成和功能微调,在互联网上.检查每个人Scriptcase如何简单可以加速的功能模块的发展. 访问 http://www.phps ...

  2. Python美女[从新手到高手]--阅读&quot;见个面问题 HashMap 储存方法&quot;联想

    今伯乐在线 上看到一篇文章.一道面试题看 HashMap 的存储方式.也就是问: 在 HashMap 中存放的一系列键值对,当中键为某个我们自己定义的类型.放入 HashMap 后,我们在外部把某一个 ...

  3. file 上传文件后缀名 限制

    比如: 要求只能上传Excel <input type="file" accept="application/vnd.ms-excel,application/vn ...

  4. C++内存泄露的有效预防方法:谁使用,谁删除 (1.2)

    内存泄露就是new出来的东西没有delete,我们能够这样:创建动态对象的人虽然使用new来创建对象:使用此对象的人负责释放此内存块. 比如:我和他人共享一个消息队列,他人将消息(new出来的对象)放 ...

  5. Jquery.validate表单验证

    一.用前必备官方网站:http://bassistance.de/jquery-plugins/jquery-plugin-validation/API: http://jquery.bassista ...

  6. 快速构建Windows 8风格应用6-GridView数据控件

    原文:快速构建Windows 8风格应用6-GridView数据控件 本篇博文主要介绍什么是GridView数据控件.如何构建常用的GridView数据呈现样式. 什么是GridView数据控件? G ...

  7. 转载:善待Redis中的数据

    Redis是我们数据的保管者,我们可以随时存随时取,大的小的,重要的不重要的,它都毫无怨言的帮我们保存着,甚至有些时候,我们变得很懒,存东西进去的时候顺便还贴张纸:"过了一个星期就帮我扔了吧 ...

  8. Java 多线程之内存一致性错误

    当不同的线程针对相同的数据却读到了不同的值时就发生了内存一致性错误.内存一致性错误的原因是非常复杂的.幸运的是我们程序员不需要详细的理解这些原因,我们需要做的事情就是使用策略来规避这些. 避免内存一致 ...

  9. Visual Studio 单元测试之五---数据库测试

    原文:Visual Studio 单元测试之五---数据库测试 数据库的单元测试主要是测试数据库中的数据是否符合特定的条件,Visual Studio 2010支持下面几种数据的单元测试类型(Visu ...

  10. 使用 C# 进行 Outlook 2007 编程

    原文:使用 C# 进行 Outlook 2007 编程 探讨如何使用 C# 编程语言生成 Outlook 识别的应用程序和 Outlook 外接程序. 请从"Add References&q ...