黑马程序员技术交流社区

标题: 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