IOS开发基础Object-C(13)—— protocol协议


今天,来给大家讲解一下OC中@protocol的用法,什么是protocol呢?从字面的意思上来说是协议的意思,那么到底什么是协议呢?那我们来普及一下协议的概念。

协议的概念

(1)协议相当于没有与类相关联的接口,他申明一组方法,列出他的参数和返回值,共享给其他类使用,然后不进行实现,让用它的类来实现这些方法
(2)在任何一个类中,只有声明了协议,都可以实现协议里的方法。
(3)协议不是一个类,更没有父类了。
(3)协议里面的方法经常都是一些委托方法

也就是说,OC中的协议就是相当于Java中的接口(抽象类),只不过OC中的名字更形象点,因为我们在学习Java中的接口时候,看可以知道其实接口就相当于一种契约(协议),给他的实现类打上标记了,当然这个活在Java5.0之后,被注解替代了,因为注解就是为了此功能诞生的。
协议就是定义了一组方法,然后让其他类去实现。
现在不了解不要紧,后面我们慢慢说。

我们先来看代码,大家跟着我来做就行了。

协议的用法

我们用协议来模拟一下一个Button按钮,被点击的过程

1、首先我们得新建一个类 Button




2、我们要给这个Button创建一个协议,ButtonDelegate.h


command + n 新建一个文件,选择Objective-C File



File Type:选择Protocol,点击确定



#import <Foundation/Foundation.h>

//<>代表实现某个协议,ButtonDelegate默认实现NSObject协议
@protocol ButtonDelegate <NSObject>

//给协议创建一个方法,代表如果某个类要实现这个协议的话就要实现这个方法
//其实这里的协议类似于Java中的接口,不同的是,java接口中的方法必须全部实现,而OC中的@protocal中的方法仅需部分实现即可

- (void) onClick:(Button *)but;

@end

在上面的文件中,我们定义了一个onClick方法,也就是说,如果某个类要遵守ButtonDelegate协议,就要实现onClick这个方法。

那我们想了,我们有了一个协议,是不是也要有一个监听器来监听这个按钮Button是否被点击,而这个监听器需要遵守ButtonDelegate这个协议

3、创建一个监听器 ButtonListener

#import <Foundation/Foundation.h>
#import "ButtonDelegate.h"

//创建一个监听器,必须遵守ButtonDelegate协议
@interface ButtonListener : NSObject<ButtonDelegate>

@end

4、在ButtonListener.m中实现ButtonDelegate协议中的方法

#import "ButtonListener.h"

@implementation ButtonListener

-(void)onClick:(Button *)but {
    NSLog(@"监听器监听到按钮%@被点击了",but);
}

@end

5、在Button中创建按钮的监听器,模拟点击事件

Button.h
#import <Foundation/Foundation.h>
#import "ButtonDelegate.h"

@interface Button : NSObject

//在Button中创建ButtonDelegate协议的成员变量,deledate,要求这个成员变量需要遵守 ButtonDelegate协议
// delegate实际上就是按钮的监听器
@property (nonatomic,retain) id <ButtonDelegate> delegate;

//创建一个方法,模拟按钮的点击
- (void) click;

@end

Button.m

#import "Button.h"

@implementation Button

- (void)click {
    // 如果_delegate实现了onClick这个方法
    if ([_delegate respondsToSelector:@selector(onClick:)]) {
        // 按钮被点击了,就应该通知监听器.并且告诉监听器哪个按钮被点击了
        [_delegate onClick:self];
    }else {
        
        NSLog(@"该方法没有被实现");
    }
}
@end

6、在main方法中验证一下

#import <Foundation/Foundation.h>
#import "Button.h"
#import "ButtonListener.h"
int main(int argc, const char * argv[]) {
    @autoreleasepool {
        
        //初始化一个按钮
        Button *button = [[Button alloc] init];
        //初始化一个监听器
        ButtonListener *listener = [[ButtonListener alloc] init];
        //设置按钮的监听器
        button.delegate = listener;
        
        //点击按钮
        [button click];
    
    }
    return 0;
}

结果:



大家也可以试一下创建多个按钮,可以使一个监听器监听多个按钮,看看能不能实现一个监听器监听到不同的按钮,希望大家多动手试试

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值