iOS回调,代理和block

作者: Frey丶 | 来源:发表于2016-08-30 16:44 被阅读422次

iOS中我们经常会遇到正反向传值,正向传值就不用多介绍了,就是属性传值(当然也可以有其他方式,这里不做介绍了). 那么反向传值呢? 或许很多人爱用通知,单例,来实现. 那么你必须要了解通知在性能上是不如代理高的.block本身就是对C语言的回调的封装,当然效率自然高了.  我们就代理和block来展开示例吧.

1.委托,代理传值.

委托就是把自己不想干的事委托给能够完成某件事的对象来干,那么能够完成这件事的对象就是我们所说的代理. 委托代理在我们封装的模块中最为常见用到,比如自己自定义的view,让控制器代理去实现功能. 我这里举个例子,我想让自定义的view委托控制器去修改名字. 

2.block

block相对于委托代理,就更加方便了,特别在传值的时候,基本上直接用block,更方便.但是要注意block里防止对象的循环引用.直接上代码


.h中的实现如下

#import<Foundation/Foundation.h>

#import<UIKit/UIKit.h>

@protocol ChangeBoxNameDelegate <NSObject>

- (void)ensureBtnActon:(NSString*)sender;

@end

@interface ChangeNameView : NSObject@property(nonatomic,weak)id<ChangeBoxNameDelegate> delegate;//代理

//注意这处一定要用weak修饰.防止循环引用

typedef void(^UpdateDataBlock)(NSString * str); //block

@property (nonatomic,copy)UpdateDataBlock block;

@end

.m中的实现

#import "ChangeNameView.h"

@implementation ChangeNameView

-(void)ensureBtnDo

{

if (self.delegate &&[self.delegate respondsToSelector:@selector(ensureBtnActon:)]) {

[self.delegate ensureBtnActon:@"回调的值"];//让他的当前的代理来实现功能.

}

//或者运用block

if(self.block){

self.block(@"回调的值");

}

}


//在需要代理的地方创建该类的对象,让该类的对象实现代理方法,遵守委托协议即可:

ChangeNameView * change = [[ChangeNameView alloc]init];

change.delegate = self;

然后实现代理方法

- (void)ensureBtnActon:(NSString*)sender

{

//sender就是回调的参数

}

用block的话就思路是一样的.即

ChangeNameView * change = [[ChangeNameView alloc]init];

change.blcok = ^()(NSString *str){

//这里的str就是回调的参数

};

相关文章

  • iOS回调,代理和block

    iOS中我们经常会遇到正反向传值,正向传值就不用多介绍了,就是属性传值(当然也可以有其他方式,这里不做介绍了). ...

  • 通知、代理、block

    通知、代理、block 是iOS中的三大回调方式。 通知 NSNotificationCenter,它就像一个广播...

  • 通知、代理、block

    通知、代理、block 是iOS中的三大回调方式。 通知 NSNotificationCenter,它就像一个广播...

  • iOS block和delegate的区别

      block和代理是iOS开发中实现回调的两种方式,本文主要是对两者的应用场景做一下对比。 1.block简介 ...

  • 谈谈Block和代理区别和联系

    代理和block的共同特性是回调机制 Block: 1 写法简练,不需要写protocol/函数等、2 block...

  • iOS 多播委托

    iOS回调有Delegate,NSNotificationCenter,block,kvo。但是项目中回调 有种情...

  • Swift中几种回调的方法

    在OC中,最常用的回调方式是代理和Block,Swift中有代理,没有Block,取代的是闭包. 这是别人总结的闭...

  • ReactiveCocoa 层次构成(笔记)

    ReactiveCocoa 是一个iOS中的函数响应式编程框架,将原有的各种设计模式,如代理、Block回调、Ta...

  • iOS回调,异步回调实现,以及创建可取消的任务

    iOS下回调机制 在iOS下实现回调的方式 iOS下的代理模式实现方式利用protocol ,需要进行向外回调的实...

  • iOS 参数传递block和函数

    搞iOS开发的同学都知道,在做回调的时候,通常用代理或者是block,本文不讲代理,只讲block。 这是很常见的...

网友评论

    本文标题:iOS回调,代理和block

    本文链接:https://www.haomeiwen.com/subject/vwofettx.html