美文网首页
iOS block的类型

iOS block的类型

作者: guoshengboy | 来源:发表于2017-06-22 16:53 被阅读0次

block:栈块、堆块、全局块。

1.栈块

#import <Foundation/Foundation.h>
static void logBlockClassName(void (^block)())
{
    NSLog(@"block class: %@", NSStringFromClass([block class]));
}
int main(int argc, const char* argv[])
{
    @autoreleasepool
    {
        // block 0
        logBlockClassName(^{
        });
        // block 1
        int a = 0;
        logBlockClassName(^{
            NSLog(@"%d\n", (int)a);
        });
        // block 2
        void (^block)() = ^{
            NSLog(@"%d\n", (int)a);
        };
        logBlockClassName(block);
    }
    return 0;
}
这个程序,在 ARC下,打印出
2014-05-29 17:25:20.386 Test[8725:303] block class: __NSGlobalBlock__
2014-05-29 17:25:20.387 Test[8725:303] block class: __NSStackBlock__
2014-05-29 17:25:20.388 Test[8725:303] block class: __NSMallocBlock__
在非ARC下面,打印出
2014-05-29 17:27:58.913 Test[8755:303] block class: __NSGlobalBlock__
2014-05-29 17:27:58.914 Test[8755:303] block class: __NSStackBlock__
2014-05-29 17:27:58.914 Test[8755:303] block class: __NSStackBlock__

NSGlobalBlock 表示这个block是全局分配的。block里面没有使用外部变量,就会是这种类型,相当于一个全局函数。
NSStackBlock 表示这个block, 是在栈上面分配的,出了栈就会消亡。使用了外部变量。比如例子的block 1, 使用了变量 a。
NSMallocBlock 表示block复制到堆上面了,可以存储下来,以后使用。
在ARC的情况下。只要将block赋值给变量,就自动帮你复制了。而非ARC的情况下,就不会。所以例子中的,block 2, ARC下,类型为 NSMallocBlock,而非ARC下,类型为 NSStackBlock

相关文章

  • OC-Block和协议

    什么是 Block Block 是iOS中一种比较特殊的数据类型 Block 是苹果官方特别推荐使用的数据类型,应...

  • Block的类型和循环引用

    本篇文章中,我们主要来探讨iOS中的Block。 Block的类型 Block主要有三种类型分别为NSGlobal...

  • block 实用小例子

    本篇是简单介绍iOS 开发中block的使用(附demo): /* 声明一个block (返回类型)(^block...

  • Objective-C基础学习之Block基本概念和Block注

    1.什么是Block Block是iOS中一种比较特殊的数据类型 Block是苹果官方特别推荐使用的数据类型, 应...

  • Block基本概念

    1.什么是Block Block是iOS中一种比较特殊的数据类型 Block是苹果官方特别推荐使用的数据类型, 应...

  • Block-介绍

    Block简单介绍首先Block是iOS中比较特殊的一种数据类型Block是苹果官方比较推荐使用的数据类型,应用也...

  • iOS Block Part3:block捕获对象数据类型的编译

    依照基本数据类型,类推对象类型.[iOS Block Part2]内已经将基本数据类型的block编译后的结构体样...

  • ios Block 类型

    Objective-C 中 Block 有三种类型: MRC 下 打印结果: 可以看到,blockA 与 bloc...

  • iOS block的类型

    block:栈块、堆块、全局块。 1.栈块 NSGlobalBlock 表示这个block是全局分配的。block...

  • iOS block的类型

    block有3种类型,可以通过调用class方法或者isa指针查看具体类型.最终都是继承自nsblock.! 全局...

网友评论

      本文标题:iOS block的类型

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