oc回调的几种方式

oc回调的几种方式

春招也在找到实习后结束了,实习时候由于组内缺人,也被调整到了ios组,也是开始了ios的学习,虽然开始学习一门新的技术是困难的,而且还是从Java转到了oc语言,但是人生本来就是一个不断学习的过程,不是吗?

这里总结一下oc语言中的回调机制。类似于Android中的interface callback回调的方式,oc中也有几种实现回调的方式,但是总的来说,实现都是我们会通过某种途径,将一段代码和一个特定的事件联系起来,当特定事件发生后,这段代码才会被执行。

这里主要介绍一下oc中的4种回调

  • Target-action回调
  • delegate方式
  • Notifications 方式
  • block方式

Target-action回调

 [button addTarget:self action:@selector(onClick:)
 forControlEvents:UIControlEventTouchUpInside];

这里我们传入了onclick方法,但是onclick方法并不会立即执行,他会在具体的click事件执行过后,才会执行onclick方法,完成了回调

delegate方式

delegate 在oc中是类似于 Android中的interface的作用,首先定义一个delegate,通过外部设置delegate,外部方法传入了delegate方法后,并不会立即执行,而是当前的事件触发过后才会执行

#import < Foundation/Foundation.h >

@protocol MyDelegate <NSObject>


@optional

- (void)doSomeThing();   //定义delegate中的方法
@end

@interface MyDelegateManager : NSObject

@property (weak) id<MyDelegate> delegate;     //软引用持有delegate方法,防止相互引用
@end
import "MyDelegateManager.h"

@interface MyDelegateManager ()

@end

@implementation MyDelegateManager
-(void)dothing(){
    if(delegate){
        [self.delegate doSomeThing];        //这里执行delegate回调
    }
}
@end
#import "ViewController.h"
#import "MyCnetralManager.h"

@interface ViewController ()


@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];

    MyDelegateManager *manager = [[MyDelegateManager alloc] init];   
    manager.delegate = self;     //将delegate设置为自身
}


- (void)doSomething() {   //这里实接口的具体实现,当调用后会执行自身的逻辑      
  //dosomething
}
@end

Notifications方式

oc中提供了Notifications方式为我们发送通知的方式,类似于Android中的广播,同样也是用到了观察者模式,首先我们需要注册一个notifacation,然后其就会接受来自外部的信息,当接受到信息后,就会执行相应的方法。

/*
第一个参数指需要注册的对象
第二个参数指需要执行的方法
第三个是需要相应的名称
第四个是接受谁发出的通告,nil表示都接受
*/
[[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(doSomething:)
                                                 name:kNotification
                                               object:nil];
/*
第一个参数指需要发送至的对象
第二个参数指发送的对象
第三个参数是指需要发送的额外信息
*/
[[NSNotificationCenter defaultCenter] postNotificationName:kNotification
                                                            object:nil
                                                          userInfo:nil];

block方式

block是一种类似Java中匿名内部类的形式,在上面的notifacation中,我们可以直接通过block来实现

[[NSNotificationCenter defaultCenter] addObserverForName:kNotification
                                                      object:nil
                                                       queue:nil
                                                  usingBlock:^(NSNotification * _Nonnull note) {
        //doSomething

    }];

同样我们也可以block当做一个接口来实现回调。

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值