首页 > 代码库 > Block

Block

Block

 

目录

  • 概述——对Block的理解
  • Block的操作

       创建Block

       使用Block

  • Block的用途

  

概述——对Block的理解

     Block代码块,有时候我们可以把功能代码块的封装放到block里面,然后通过使用block来实现某些功能,除此之外,block还有很多其他强大的功能

 

Block的操作

创建Block

返回类型 (^block名)(参数列表) = ^(参数列表){      };

例如

void (^myblock)( ) = ^( ){   };

int (^myblock)( int,int) = ^(int a,int b){对a、b的处理};

使用Block

需要带上“( )”,例如:myblock( );myblock(10,20);

block里面改变外部的局部变量

  • block内部可以访问外部变量
  • 默认情况下,block内部不能修改外部的局部变量
  • 给局部变量加上__block关键字,则这个局部变量可以在block内部进行修改

使用typedef定义block类型(和指向函数的指针很像),感觉有点像面向对象编程中松耦合和多态的思想,例如:

typedef int (^myblock3)(int,int);

myblock3 block0,block1;

block0 = ^(int a,int b){return a-b;};

block1 = ^(int a,int b){return a+b;};

 

Block的用途

界面传值

在SecondViewController.h中定义一个block,并用该block给SecondViewContrller声明一个block对象

typedef void (^PassValueBlock)(NSString *);

@property (nonatomic,copy) PassValueBlock passValueBlock;

当SecondViewController消失时,调回到第一个界面所做处理

if(_passValueBlock !=nil &&![_textField.text isEqualToString:@""]){

_passValueBlock(_textField.text);

}

在FirstViewController中,跳转前所做处理

PassValueBlock block = ^(NSString *str){

  _showLabel.text = str;

};

secondVC.passValueBlock = block;

回调

 

Block