黑马程序员技术交流社区
标题: Protocol笔记整理 [打印本页]
作者: silenCetestifY 时间: 2016-2-17 14:28
标题: Protocol笔记整理
Protocol(协议)类似于C#/java中的接口,可以声明方法,与java不同的是实现类可以只实现一部分方法。在OC中的潜规则是协议名都是“Xxxelegate”。
OC的最根本协议叫NSObject,定义一个协议需要实现这个根本协议,实现协议用尖括号表示,以一个按钮点击监听器做例子:
//Button.h
#import <Foundation/Foundation.h>
//为了让协议用Button做参数,声明这个类
@class Button;
//定义一个协议,实现基础协议,以Delegate结尾
@protocol ButtonDelegate <NSObject>
//定义协议的点击方法,顺便把触发的按钮传进来
-(void)onClick:(Button *)btn;
@end
//定义一个按钮类
@interface Button : NSObject
//定义一个遵循协议的delegate属性,遵循协议用尖括号表示
//相当于在java当中定义一个接口类型的属性
@property (nonatomic, retain) id<ButtonDelegate> delegate;
//按钮有一个模拟的点击方法,用于触发协议中的onClick
-(void)click;
@end
//Buttom.m
//导入按钮的头文件
#import "Button.h"
//按钮的实现
@implementation Button
//为防止内存泄露需要先释放协议
-(void)dealloc{
[_delegate release];
[super dealloc];
}
//按钮点击的模拟方法
-(void)click{
//OC语法:判断代理有没有实现onClick:方法
if ([_delegate respondsToSelector:@selector(onClick:)]){
//调用协议当中的方法,并把sender传进去
[_delegate onClick:self];
}
}
@end
//Buttom.m
//导入按钮的头文件
#import "Button.h"
//按钮的实现
@implementation Button
//为防止内存泄露需要先释放协议
-(void)dealloc{
[_delegate release];
[super dealloc];
}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |