Objective-C该Protocol

Protocol

简单来说就是一系列方法的列表,当中声明的方法能够被不论什么类实现,这样的模式一般称为(delegation)模式

在iOS中和OS X中,Apple採用了大量的代理模式来实现MVC中的View(UI控件)和Controller(控制器)

以下举个样例

声明一个Button类和Buttonlisterner类

在Button.h文件中

#import <Foundation/Foundation.h>

//类声明
@class Button; //<>代表实现某个协议,NSObject为做根本的协议
//ButtonDelegate为协议的名称
@protocol ButtonDelegate<NSObject> -(void)onClick:(Button*)but; @end @interface Button : NSObject //nonatomic不须要多线程管理,delegate是button的监听器 @property(nonatomic,retain) id<ButtonDelegate> delegate; -(void)Click; @end

在Button.m文件中

#import "Button.h"

@implementation Button

//-(void)dealloc{
// [super dealloc];
//} -(void)Click{
NSLog(@"Clickbutton被点击了。。。 "); //假设有onClick:的方法则调用此方法
if ([_delegate respondsToSelector:@selector(onClick:)]) {
//而且告诉监听器哪个button被点击了
[_delegate onClick:self];
} }
@end

在Buttonlisterner.h文件中

#import <Foundation/Foundation.h>
#import "Button.h" //对协议提前声明。跟@class的作用是一样的 @protocol ButtonDelegate; @interface Buttonlisterner : NSObject<ButtonDelegate> @end

在Buttonlisterner.m文件中

#import "Buttonlisterner.h"
#import "Button.h" @implementation Buttonlisterner -(void)onClick:(Button *)but
{
NSLog(@"onClick...");
}
@end

在main.m中

int main(int argc, const char * argv[])
{ @autoreleasepool {
Button* button = [[Button alloc]init];
Buttonlisterner* listenter = [[Buttonlisterner alloc]init];
button.delegate=listenter;
[button Click]; }
return 0;
}

Objective-C该Protocol的更多相关文章

  1. SAE/ISO standards for Automotive

    On-Board Diagnostics J1962 Diagnostic Connector Equivalent to ISO/DIS 15031-3: December 14, 2001J201 ...

  2. Automake

    Automake是用来根据Makefile.am生成Makefile.in的工具 标准Makefile目标 'make all' Build programs, libraries, document ...

  3. Objective中的协议(Protocol)

    Objective中的协议(Protocol) 作用: 专门用来声明一大堆方法. (不能声明属性,也不能实现方法,只能用来写方法的声明). 只要某个类遵守了这个协议.就相当于拥有这个协议中的所有的方法 ...

  4. Objective-C( protocol协议)

    protocol 协议 protocol:用来声明方法 1.协议的定义 @protocol 协议名称 <NSObject> // 方法声明列表.... @end 2.如何遵守协议 1> ...

  5. objective c, category 和 protocol 中添加property

    property的本质是实例变量 + getter 和 setter 方法 category和protocol可以添加方法 category 和 protocol中可以添加@property 关键字 ...

  6. objective c, protocol

    OC中协议类似于java中的接口,在多个类具有类似的方法时可以将这些方法定义到protocol中,然后各个类分别实现protocol中的各个方法. 例:有两个类Square和Circle, 定义一个p ...

  7. Objective C Protocol implementation

    protocol 类似于接口,可以实现函数的回调 @protocol MyDelegate<NSObject> -(void)myCallbackFunction; @end //Call ...

  8. The MESI Protocol

    COMPUTER ORGANIZATION AND ARCHITECTURE DESIGNING FOR PERFORMANCE NINTH EDITION To provide cache cons ...

  9. CACHE COHERENCE AND THE MESI PROTOCOL

    COMPUTER ORGANIZATION AND ARCHITECTURE DESIGNING FOR PERFORMANCE NINTH EDITION In contemporary multi ...

  10. Objective C运行时(runtime)

    #import <objc/runtime.h> void setBeingRemoved(id __self, SEL _cmd) { NSLog(@"------------ ...

随机推荐

  1. WPF案例 (四) 模拟Windows7桌面任务栏

    原文:WPF案例 (四) 模拟Windows7桌面任务栏 这个程序模彷了Windows7的桌面任务栏,当在桌面上双击某个快捷方式时,将打开一个新的子界面,并且在任务栏里创建一个链接到此界面的任务栏图标 ...

  2. Androidclient和server端数据交互的第一种方法

    网上有非常多样例来演示Android客户端和server端数据怎样实现交互只是这些样例大多比較繁杂,对于刚開始学习的人来说这是不利的.如今介绍几种代码简单.逻辑清晰的交互样例,本篇博客介绍第一种: 一 ...

  3. 编译v8引擎

    本机环境是win7+vs2010(本来想用2012的,但是发现默认的项目是2010的) 1.首先下载V8的源码 安装好svn,并在cmd下能使用svn help: svn下载地址(安装包):http: ...

  4. Linux好书、经典书籍推荐

    Linux好书.经典书籍推荐 思想篇 <Linux/Unix设计思想> 图书将Unix与Linux的原理有效地结合起来,总结了Unix/Linux软件开发中的原则.在保留了第1版中Unix ...

  5. Android之场景桌面(一)

    声明:转载请务必注明出处,本文代码和主题仅供学习交流,请勿用于商业用途. 引言:最近Android场景桌面开始流行起来了,跟原始的Android桌面相比,场景桌面能逼真的模拟各种自然物体,并且通过点击 ...

  6. 自己定义 ViewGroup 支持无限循环翻页之三(响应回调事件)

    大家假设喜欢我的博客,请关注一下我的微博,请点击这里(http://weibo.com/kifile),谢谢 转载请标明出处,再次感谢 ################################ ...

  7. Debian7.6安装过程中遇到的问题

    一 sudo命令不能用 1 使用su切换到root用户,命令: su 2 使用名:vim /etc/sudoers加入sudoer用户,命令: vim /etc/sudoers 找到root=(ALL ...

  8. [IOS]UIWebView实现保存页面和读取服务器端json数据

    如何通过viewView保存访问过的页面?和如何获取并解析服务器端发送过来的json数据?通过一个简单的Demo来学习一下吧! 操作步骤: 1.创建SingleViewApplication应用,新建 ...

  9. 在MyEclipse中编写Web Project,编码设置全集合

    1.window-->preference-->general-->content type 然后在<Content Types>中展开每一颗子项,并在<Defau ...

  10. DSL简介(转)

    DSL编程:有人将DSL编程称之为声明式(Declarative)编程.DSL是在模型之上建立的一种更加灵活的对 模型化的理解和使用方式.语义模型是DSL的核心.内部DSL:用通用语言的语法表示DSL ...