简单理解block的种类

作者: 蜗蜗牛在奔跑 | 来源:发表于2019-12-04 11:17 被阅读0次

块(Block)分为三类:

  • 栈块
  • 堆块
  • 全局块

1. 栈block

定义块的时候,其所占内存区域是分配在栈中的,而且只在定义它的那个范围内有效:

void (^block)();
if ( /* some condition */ ) {
block = ^{
NSLog(@"Block A");
};
} else {
block = ^{
NSLog(@"Block B");
};
}
block();

上面定义的两个块只在if else语句范围内有效,一旦离开了最后一个右括号,如果编译器覆写了分配给块的内存,那么就会造成程序崩溃

2. 堆block

为了解决这个问题,我们可以给对象发送copy消息,复制一份到堆里,并自带引用计数:

void (^block)();
if ( /* some condition */ ) {
block = [^{
NSLog(@"Block A");
} copy];
} else {
block = [^{
NSLog(@"Block B");
} copy];
}
block();

3. 全局block

全局块声明在全局内存里,而不需要在每次用到的时候于栈中创建。

void (^block)() = ^{
NSLog(@"This is a block");
};

相关文章

  • 简单理解block的种类

    块(Block)分为三类: 栈块 堆块 全局块 1. 栈block 定义块的时候,其所占内存区域是分配在栈中的,而...

  • Block简单理解

    Block块的一点总结 希望大家指正 共同进步 block是一个匿名函数 Block定义分为三个部分:返回值类型...

  • 简单理解 Block

    一、万年不变老问题:什么是 Block Block 是一段代码块,可以简单的理解为带有自动变量的 匿名函数,自动变...

  • block的简单理解

    最近的工作突然闲了下来,让我有些无所适从,突然想起好久没写的文章,拖拖拉拉今天补上一篇。 关于block,网上的文...

  • block的简单理解

    block跟swift中的闭包(closure)比较: 基本一样,都常用于值的回调,特别是在多线程的网络请求回调中...

  • iOS block 为什么官方文档建议用 copy 修饰

    一、block 的三种类型block 三种类型:全局 block,堆 block、栈 block。全局 block...

  • [25]Effective Objective-C 2.0【37

    第六章:Block与GCD 第三十七条:理解block 1.根据block在内存中的位置,block被分成三种类型...

  • Block类型及存储区域

    序言 在Block前言中,讲到Block 的isa指针六种类型,以及每种类型的存储区域。简单回顾一下最终结论 以上...

  • 28.iOS底层学习之block初学习

    本章提纲1、Block的几种类型2、Block常见试题3、Block的循环引用问题 1、Block的几种类型 Bl...

  • block的简单理解(1)

    一. block类型的变量的声明. 返回值类型(^block变量名)(参数列表); void (^myBlock)...

网友评论

    本文标题:简单理解block的种类

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