zoukankan      html  css  js  c++  java
  • IOS开发(101)之程序块block初窥

    1 前言

    以前也有介绍过GCD,但是感觉不够深入,今天我们来重新认识一下这个概念,GCD即Grand Central Dispatch(中文直译宏伟的中心派遣o(╯□╰)o)。它的一个重要概念是队列。系统提供了许多预定义的队列,包括可以保证始终在主席那成上执行其工作的队列。

    2 详述

    GCD严格遵循FIFO(先进先出)原则。添加到GCD队列的工作始终按照这个加入队列的顺序启动。尽管如此,他们不会总是按照相同的顺序完成,因为如果可能,GCD队列将自动在多个线程之间分配它的工作。

    我们可以将将GCD理解为一个线程池。

    跟GCD相关的是一种成为程序块的语言功能,这是向C语言本身添加的一些新语法。这对于充分的利用GCD非常重要。程序块背后的理念是像任何其他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 结语

    以上是所有内容,希望对大家有所帮助。

  • 相关阅读:
    Lesson_strange_words6
    Lesson_strange_words3
    Lesson_strange_words4
    Lesson_strange_words1
    Lesson_strange_words2
    关于我们子页面
    关于我们页面
    走进龙门石窟子页面
    3.用户登陆注册
    2.项目初始化
  • 原文地址:https://www.cnblogs.com/dyllove98/p/3125019.html
Copyright © 2011-2022 走看看