IOS开发(101)之程序块block初窥
1 前言
以前也有介绍过易做图,但是感觉不够深入,今天我们来重新认识一下这个概念,易做图即Grand Central Dispatch(中文直译宏伟的中心派遣o(╯□╰)o)。它的一个重要概念是队列。系统提供了许多预定义的队列,包括可以保证始终在主席那成上执行其工作的队列。
2 详述
易做图严格遵循FIFO(先进先出)原则。添加到易做图队列的工作始终按照这个加入队列的顺序启动。尽管如此,他们不会总是按照相同的顺序完成,因为如果可能,易做图队列将自动在多个线程之间分配它的工作。
我们可以将将易做图理解为一个线程池。
跟易做图相关的是一种成为程序块的语言功能,这是向C语言本身添加的一些新语法。这对于充分的利用易做图非常重要。程序块背后的理念是像任何其他C语言类型一样的对待特定的代码块。程序块可以分配给一个变量,以参数的形式传递给函数或者方法。当然也可以执行。通过这种方式,程序块可用作Objective-C中的委托模式或者C中的回调函数的代替路径。
程序块非常类似于方法或者函数,程序块可以接受一个或者多个参数并指定一个返回值。要声明程序块变量,可以使用“^”符号以及其他一些放在圆括号内的代码来声明参数和返回类型。要定义程序块本身,执行的操作大体相同,但在后面会添加定义程序块的实际代码,包含在花括号内。例子:
//声明一个没有参数和返回值的block变量 叫做loggerBlock
void(^loggerBlock)(void);
//实例化这个block
loggerBlock = ^{NSLog(@“I'm just glad they didn't call it a bug”);};
//执行这个block,就像调用函数一样
loggerBlock();
如果想要block中能修改外部的变量,需要在声明变量之前添加存储修饰符__block,进行外部变量“读/写”。、注意block前面有两条下划线,而不是一条.
//定义一个可以改变的块变量
__block int a = 0;
//定义一个快修改a变量
void(^sillyBlock)(void) = ^{a = 47;};
//在调用块之前检查a变量
NSLog(@"a ==%d",a);//outputs "a==0"
//执行块
sillyBlock();
//调用之后检查a的值
NSLog(@"a==%d",a);//outputs “a==47”
3 结语
以上是所有内容,希望对大家有所帮助。
补充:移动开发 , IOS ,