美文网首页
内存管理与自动引用计数学习 — 第六日

内存管理与自动引用计数学习 — 第六日

作者: 徐恩_ | 来源:发表于2016-11-23 23:28 被阅读0次

    第二章 Blocks

    2.1 Blcock概要

    带有自动变量的匿名函数

    2.2 Blocks模式

    2.2.1 BLock语法

    “^” “返回值” “参数列表” “表达式”

    返回值和参数列表可省略

    与C语言函数名对比

    a. 没有函数名

    b. 带有 “^”

    2.2.2 Blocks类型变量

    C语言函数指针

    int func(int count) {

    return count + 1;

    }

    int (*funcptr)(int) = &func;

    Blocks的声明

    int (^blk)(int);

    Block可以作为任何参数使用。

    int (^blk)(int) = ^(int count){return count +1};

    Block类型变量的简单记述

    typedef int (^blk_t)(int);

    /*

    * 原来的记述方式

    * void func (int (^blk)(int))

    */

    void func (blk_t blk)

    /*

    * int (^func()(int))

    */

    void func(func()(int))

    Block的使用

    int resulet = blc(10)

    2.2.3 自动变量值捕获

    int main() {

    int dmy = 256;

    int val = 10;

    const char *fmt = “val = %d\n”;

    void (^blk)(void) = ^{printf(fmt, val);};

    val = 2;

    fmt = “New formmat val = %d\n”;

    return 0;

    }

    该 block 在执行时,字符串指针“val = %d\n”被赋值给自动变量 fmt,int值被复制到自动变量 val 中,因此这些值被保存(即被截获),从而在执行块时使用。

    2.2.4 __block 说明符

    只能保存执行 block 语法孕检的值,保存后就不能改写该值。给该自动变量附加 __block 说明符,就能实现在 block 内赋值

    2.2.5 截获的自动变量

    NSMutableArray 可添加修改删除元素,不可重新赋值

    C语言数组的截获没有在 block 截获自动变量的方法中实现

    相关文章

      网友评论

          本文标题:内存管理与自动引用计数学习 — 第六日

          本文链接:https://www.haomeiwen.com/subject/usxbpttx.html