如何在iOS中定义和使用

  介绍

这篇文章将为大家详细讲解有关如何在iOS中定义和使用块,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。

<强>定义与使用

<强>块变量的声明

块变量的声明格式:返回值类型(^块名字)(参数列表),

block 变量的声明格式:返回值类型(^块名字)(参数列表);   ,//声明一个无返回值,两个参数的,块   ,无效(^ block1) (NSString  NSString  *, * b);   ,//省略写法   ,无效(^ block2) (NSString  NSString  *, *);

块变量的赋值

,//块变量的赋值   ,//块变量名,=,^(参数列表){函数体};=,,block1  ^ (NSString  * x, NSString  * y) {   ,NSLog (@" % @ % @", x, y);   ,};   ,block1 (@" 123123“, @" QWEQWEQWE");

声明块变量的同时进行赋值

,//声明,block 变量的同时进行赋值   ,int (^ block3) (int),=, ^ (int ) {   ,return  * 3;   ,};   ,NSLog (@" % d" block3 (3));

<强>使用typedef定义块类型

在实际使用块的过程中,我们可能需要重复地声明多个相同返回值相同参数列表的块变量,如果总是重复地编写一长串代码来声明变量会非常繁琐,所以我们可以使用typedef来定义块类型

# pragma  mark 使用,typedef 定义,block 类型   ,//定义一个无返回值类型,无参数列表的,块   ,typedef  void  (^ Block4) ();   ,Block4  Block4 =, ^ () {   NSLog才能(@"小姐:am  block4");   ,};   ,block4 ();

块作为函数参数

# pragma  mark 块作为函数参数   ,int (^ block5) (int, int),=, ^ (int  int  b) {   return 才能;a + b;   ,};   ,[self  useBlock5 block5):;   ,   ,//简化书写   ,//typedef  int  (^ Block6) (int, int);(全局声明)   ,Block6  Block6 =, ^ (int  int  b) {   return 才能;a + b;   ,};   ,[self  useBlock6 block6):;   ,   ,   安康;(void) useBlock5: (int (^) (int, int)) block5  {   ,NSLog (@" block5: % d", block5 (3、5));   }   安康;(空白)useBlock6:(Block6 ) block6 {   ,NSLog (@" block6: % d", block6 (4、5));   }

块内访问局部变量

<李>

在块中可以访问局部变量

<李>

在声明块之后,调用块之前对局部变量进行修改,在调用块时局部变量值是修改之前的旧值

<李>

在块中不可以直接修改局部变量

# pragma  mark  block  - - - - - - - - - - - -访问局部变量   ,//block 中不可以直接修改局部变量   ,int  value1 =, 100;   ,void  (^ block7)(空白),=,^ (){   ,,NSLog (@" value1: % d" value1);   ,};=,value1  200;   ,block7();//输出100 <李>

在局部变量前使用下划线下划线块修饰,在声明块之后,调用块之前对局部变量进行修改,在调用块时局部变量值是修改之后的新值

<李>

在局部变量前使用下划线下划线块修饰,在块中可以直接修改局部变量

# pragma  mark  block  - - - - - - - - - - - -访问局部变量   ,//block 中不可以直接修改局部变量   ,//在局部变量前使用__block修饰,在块中可以直接修改局部变量   ,__block  int  value1 =, 100;   ,void  (^ block7)(空白),=,^ (){   ,,value1 + +;   NSLog才能(@" value1: % d" value1);   ,};=,value1  200;   ,block7();//输出100,__block 修饰之后输出200

块内访问全局变量

在声明块之后,调用块之前对全局变量进行修改,在调用块时全局变量值是修改之后的新值

# pragma  mark  - - - - - - - - - - - - - - - - - - block 访问全局变量   ,//在块中可以访问全局变量=,value2  100;   ,无效(^ block8)(空白),=,^ (){//才能在块中可以直接修改全局变量   自我才能→value2 + +;   NSLog才能(@" value2: % d",自我→value2);   ,};=,value2  200;   ,block8 ();

<强>块内访问静态变量

# pragma  mark  - - - - - - - - - -块内访问静态变量   ,static  int  value3 =, 100;   ,无效(^ block9)(空白),=,^ (){   value3才能+ +,//在块中可以直接修改静态变量   NSLog才能(@" value3: % d" value3);   ,};   ,//在声明块之后,调用块之前对静态变量进行修改,在调用块时静态变量值是修改之后的新值=,value3  200;   ,block9 ();

如何在iOS中定义和使用