关于block

作者: myjourney | 来源:发表于2016-08-07 22:29 被阅读45次

1、三种类型的block介绍

根据Block在内存中的位置分为三种类型NSGlobalBlock,NSStackBlock, NSMallocBlock。

NSGlobalBlock:类似函数,位于代码段;

NSStackBlock:位于栈内存,函数返回后Block将无效;

NSMallocBlock:位于堆内存

1)全局block(__NSGlobalBlock__),定义在函数外面的block是global的;另外如果函数内部的

block,但是没有捕获任何自动变量,那么它也是全局的(ARC和MRC都一样)。

2)栈block,

在MRC下,栈block

在MRC下,使用外部变量的b1是栈block,在其内部对栈外部变量复制,并且放到了栈区。

3)堆block则是对栈blockcopy得来。对全局block copy 不会有任何作用,返回的依然是全局block。

总结:

1)ARC下

-没有使用外部变量Global

分区 第三天(@传智如意大师) 的第16页

-没有使用外部变量

-使用外部变量

2)MRC下

-没有使用外部变量

-使用外部变量

3)对一个栈block通过copy可以得到堆block

2、block类型变量内存管理参数为什么要使用copy?

1)如果不使用copy,使用assign带来的问题

@property(nonatomic,assign)void(^myblock)();

定义一个Person类来演示问题

@interfacePerson : NSObject

@property(nonatomic,assign)void(^myblock)();

-(void)test;

@end

@implementationPerson

-(void)test{

int n =5;

void(^bb)()= ^{

NSLog(@"myblock! n = %d",n);

};

self.myblock= bb;

NSLog(@"self stackBlock --->%@",self.myblock);

NSLog(@"self stackBlock --->%@",self.myblock);

}

@end

在ARC下测试:self.myblock应该为堆区,而实际打印出来却为栈区.

在MRC下测试:在MRC下,使用了外部变量n,blook在栈区.

由此可知,不管再MRC还是在ARC,使用assign修饰的block,都是栈block.

如果使用copy后,则 栈block -----copy-------得到的是堆block,不会出现问题。

相关文章

  • iOS面试之Block大全

    Block Block内容如下: 关于Block 截获变量 __block修饰符 Block的内存管理 Block...

  • iOS面试之Block模块

    Block Block内容如下: 关于Block 截获变量 __block修饰符 Block的内存管理 Block...

  • 详细的探讨一下Block(讨论篇、基础篇、实质篇)

    章节目录 关于Block的讨论篇 Block的基础篇 Block的实质篇 讨论篇: 为什么要看Block? 为了更...

  • 关于block(4)

    关于block(4) 标签: iOS 技术 接上篇,我们继续探究block。 block的copy属性 研究到这里...

  • block

    一.关于block block是将函数及其执行上下文封装起来的对象。 __block_impl结构体为 block...

  • 关于Block

    转化前代码 用clang命令clang -rewrite-objc testBlockM.m 关注 isa:isa...

  • 关于Block

    1.Block基本用法: block声明返回值(^block变量名)(参数)void(^block)(); blo...

  • 关于block

    block是在iOS 4.0之后出现的,封装了一段代码并将这段代码当做变量,通过block()的方式进行回调,说白...

  • 关于block

    当引用到外部的变量 1 无__block关键字时,内部直接创建一个同名变量,然后赋值。所以内部变量的地址 跟外面是...

  • 关于Block

    前段时间深受block循环引用的毒害,花时间研究下。 一、Block是C语言的一种数据类型,是一段提前准备好的代码...

网友评论

    本文标题:关于block

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