美文网首页
iOS 的三种block

iOS 的三种block

作者: 云上飘飘扬 | 来源:发表于2018-08-30 10:39 被阅读0次

block有三种:

NSStackBlock存储于栈区

NSGlobalBlock存储于程序数据区

NSMallocBlock存储于堆区

NSGlobalBlock 静态区block,这是一种特殊的bloclk,因为不引用外部变量而存在。另外,作为静态区的对象,它的释放是有操作系统控制的,这一点我们最后再聊。 

NSStackBlock 栈区block,位于内存的栈区,一般作为函数的参数出现。 

NSMallocBlock 堆区block,位于内存的堆区,一般作为对象的property出现。

如果一个blcok引用了外部变量是栈block,则其不引用外部变量就成为了静态blcok。 

如果一个block引用了外部变量是堆block,则其不引用外部变量就成为了静态block。

MRC 下

@property(nonatomic,copy)void(^block)();

int value =10;

void(^blockA)() = ^    {

      NSLog(@"value: %d",value);   

};

NSLog(@"MRC 引用计数: %ld, block is: %@",[blockA retainCount], blockA);

void(^blockB)() = ^{

      NSLog(@"blockB");   

};

NSLog(@"MRC 引用计数: %ld, block is: %@",[blockB retainCount], blockB);   

_block = [blockA copy];

NSLog(@"MRC 引用计数: %ld, block is: %@",[self.block retainCount],self.block);        [_block retain];

NSLog(@"MRC 引用计数: %ld, block is: %@",[self.block retainCount],self.block);    [_block release];

NSLog(@"MRC 引用计数: %ld, block is: %@",[self.block retainCount],self.block);

打印结果:

MRC 引用计数:1, blockis: <__NSStackBlock__:0x7fff59038bc8>   

MRC 引用计数:1, blockis: <__NSGlobalBlock__:0x106bc70e0>   

MRC 引用计数:1, blockis: <__NSMallocBlock__:0x610000058330>   

MRC 引用计数:1, blockis: <__NSMallocBlock__:0x610000058330>   

MRC 引用计数:1, blockis: <__NSMallocBlock__:0x610000058330>


可以看到,blockA 与 blockB 的差异只在于有没有调用外部变量,这点差异导致它们的类型不同,存储位置不同。

相关文章

  • ios相关:block

    三种常用方式 用block改写UIButton点击事件,block改写UIAlerView的代理 iOS bloc...

  • ios中的Block

    在iOS中Block有三种形式: 1、void(^MTBlock)(void)=^{ };这样定义的block为全...

  • 关于Block的碎片整理

    iOS中Block内存管理分为三种: NSGloabBlock NSStackBlock NSMallocBloc...

  • Block的类型和循环引用

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

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

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

  • iOS-2 Block

    block块 系列文章: iOS Block浅浅析 - 简书 iOS Block实现原理 iOS Block __...

  • iOS Block存储域及循环引用

    系列文章:iOS Block概念、语法及基本使用iOS Block实现原理iOS Block __block说明符...

  • iOS Block实现原理

    系列文章:iOS Block概念、语法及基本使用iOS Block __block说明符iOS Block存储域及...

  • iOS block浅析

    iOS开发中经常会使用block结合gcd来完成多线程编程,block也属于对象,主要有三种类型:1、 _NSCo...

  • iOS block之三种block

    前言先说明一下,因为ARC下系统会对block做一些拷贝和释放操作,对深入于理解block无益,所以本篇文章所提到...

网友评论

      本文标题:iOS 的三种block

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