block回调

每个刚接触OC的童鞋们,对block的使用都很头痛。

block是一个闭包,类似于函数,但是我们调用的时候传递的是一个代码块,它可以存在参数,这个参数并不是在定义block的时候就赋予值, 而是我们在实际运行block的时候才赋予值.(这一点需要注意,只有我们调用block时,才会运行代码块)

废话少说,下面我就讲下block作为形参和属性的时区别(直接上代码)

================================================

先建两个类,A类、B类;A跳转B类,通过block将B类的参数值回传A类

              --  A类  --                                                        -- B类 --

先在B类.h中声明一个代码块

typedef void(^changeLabel)(NSString * str)

1、block作为属性

(1)建立B类

在B.h中声明:

@property(nonatomic,copy)changeLabel blockOne;//作为属性

在B.m中:

- (void)viewWillDisappear:(BOOL)animated{

//    block调用(相当于函数的调用)

if (self.blockOne) {

self.blockOne(self.textField.text);//将B类中的文本框的内容传递给A类

}

}

(2)建立A类

在A.m中:

- (IBAction)next:(id)sender {

BClassVC  *b =[[BClassVC alloc]init];

//    block的定义类比于函数的定义(这个block只有在B类中被调用时才会执行,通过回调,将B类中的文本框的内容传递给A类)

b.blockOne= ^(NSString * str){

_label.text = str;

NSLog(@"======%@===blockOne=====",str);

};

[self.navigationController pushViewController:vc animated:YES];

}



2、block作为参数

(1)建立B类

在B.h中:

- (void)para:(changeLabel)blockTwo;//作为形参

在B.m中:

- (void)para:(changeLabel)blockTwo{

blockTwo(@"====para:(changeLabel)blockTwo===");

}


(2)建立A类

在A.m中

- (IBA)Click:(id)sender{

BClassVC  *b =[[BClassVC alloc]init];

/*调用para:(changeLabel)blockTwo

通过形参Block回调打印“====para:(changeLabel)blockTwo===”*/

[b para:^(NSString *str) {

NSLog(@"%@",str);

}];

}

欢迎常来,不足之处,各位小伙伴多提意见,一起交流,一起进步。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Block 回调实现 先跟着我实现最简单的 Block 回调传参的使用,如果你能举一反三,基本上可以满足了 OC ...
    codeshow阅读 397评论 0 1
  • *面试心声:其实这些题本人都没怎么背,但是在上海 两周半 面了大约10家 收到差不多3个offer,总结起来就是把...
    Dove_iOS阅读 27,211评论 30 472
  • 随着学习的深入,对block的认识也是越来越清晰,就是”一个可以截获自动变量的匿名函数“,在一般应用上比较顺手,但...
    有心向往阅读 818评论 0 1
  • 一:外围设备 1.蓝牙中用到的方法:如下:一定要掌握 CBPerpheral(外围设备): 属性有:state n...
    邵琼阅读 657评论 2 0
  • 文/哥伦比亚的倒影 所幸能够及时分辨所有各带深意的相遇,并天真且不惧消失地去爱。 一、 有时,用直觉和自身磁场判断...
    哥伦比亚的倒影阅读 477评论 1 6