A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© silenCetestifY 中级黑马   /  2016-2-17 14:28  /  700 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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];
}

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马