介绍
这篇文章将为大家详细讲解有关如何在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中定义和使用