Objective-C该Protocol
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的更多相关文章
- SAE/ISO standards for Automotive
On-Board Diagnostics J1962 Diagnostic Connector Equivalent to ISO/DIS 15031-3: December 14, 2001J201 ...
- Automake
Automake是用来根据Makefile.am生成Makefile.in的工具 标准Makefile目标 'make all' Build programs, libraries, document ...
- Objective中的协议(Protocol)
Objective中的协议(Protocol) 作用: 专门用来声明一大堆方法. (不能声明属性,也不能实现方法,只能用来写方法的声明). 只要某个类遵守了这个协议.就相当于拥有这个协议中的所有的方法 ...
- Objective-C( protocol协议)
protocol 协议 protocol:用来声明方法 1.协议的定义 @protocol 协议名称 <NSObject> // 方法声明列表.... @end 2.如何遵守协议 1> ...
- objective c, category 和 protocol 中添加property
property的本质是实例变量 + getter 和 setter 方法 category和protocol可以添加方法 category 和 protocol中可以添加@property 关键字 ...
- objective c, protocol
OC中协议类似于java中的接口,在多个类具有类似的方法时可以将这些方法定义到protocol中,然后各个类分别实现protocol中的各个方法. 例:有两个类Square和Circle, 定义一个p ...
- Objective C Protocol implementation
protocol 类似于接口,可以实现函数的回调 @protocol MyDelegate<NSObject> -(void)myCallbackFunction; @end //Call ...
- The MESI Protocol
COMPUTER ORGANIZATION AND ARCHITECTURE DESIGNING FOR PERFORMANCE NINTH EDITION To provide cache cons ...
- CACHE COHERENCE AND THE MESI PROTOCOL
COMPUTER ORGANIZATION AND ARCHITECTURE DESIGNING FOR PERFORMANCE NINTH EDITION In contemporary multi ...
- Objective C运行时(runtime)
#import <objc/runtime.h> void setBeingRemoved(id __self, SEL _cmd) { NSLog(@"------------ ...
随机推荐
- hdu3240 Counting Binary Trees
Counting Binary Trees Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Other ...
- 【Python】Coding the Matrix:Week 5 Perspective Lab
这个Lab的内容光是说明就有7页之巨,我反复看了很久才看懂一点点,Lab主要完成的是从不同坐标系表示之间变换的方法. 原始的图片,从Camera basis的表示转换成WhiteBoard basis ...
- cocos2dx 制作单机麻将(一)
今天開始打算解说下cocos2dx下怎样制作国标麻将 前半部分先解说麻将的逻辑部分,由于都是代码,可能会比較枯燥无聊. 这部分讲完后,你也能够用其它游戏引擎来制作麻将 后半部分,就解说余下的cocos ...
- tomcat dbcp 基于jndi当配置java.sql.SQLException: Already closed
最近发现了一个现象,观察到的生产环境,不要有一段时间操作,然后另一个操作,首先将有一个数据库连接:java.sql.SQLException: Already closed.,例如下列: error ...
- linq 中执行方法
Database1Entities db = new Database1Entities(); protected void Page_Load(object sender, EventArgs e) ...
- Lua 与C 交换 第一篇
编译 windows上编译lua源代码 cl /MD /O2 /W3 /c /DLUA_BUILD_AS_DLL *.c del *.o ren lua.obj lua.o ren luac.obj ...
- css 背景色渐变
background:rgba(0, 0, 0, 0) linear-gradient(to bottom, #eff5ff 0px, #e0ecff 20%) repeat-x scroll 0 0 ...
- Mega的简单使用
Table of Contents 1 Mega画树的简单应用 2 fas格式文件的准备 3 用生成的.meg画树 4 生出树的处理 4.1 修改内容,添加标注 4.2 导出 4.3 后面随着学习的进 ...
- uva 571 素数的性质
给定 两个杯子,容量分别分Ca,Cb, 要我们用这两个瓶子倒来倒去,得到某个瓶子里装有N的水 而且给的数据保证 Cb > N,且Ca,Cb互质 那么我们肯定可以在容量为Cb的杯子里得到N的水 ...
- 动画(Animation) 它 (闪烁、左右摇摆、跷跷板等功效)
一侧到另一侧的影响: (这里显示的是并不那么顺利) 一.续播 (不知道取什么名字好,就是先播放动画A, 接着播放动画B) 有两种方式. 第一种.分别动画两个动画,A和B, 然后先播放动画A,设置A ...