OC block

作者: d5cbd4f07363 | 来源:发表于2017-07-07 14:26 被阅读16次

案例1:

int aa = 42;

void (^show)(int a) = ^(int a){

      NSLog(@"aa = %d",aa);

}

aa = 50;

show(34);

打印结果为42;

block会把aa变量复制为自己私有的const变量,也就是说block会捕获栈上的变量(或指针),将其复制为自己私有的const变量。在例子1中,在进行aa = 50的操作的时候,block已经将其复制为自己的私有变量,所以这里的修改对block里面的aa不会造成任何影响。

案例2:

__block int aa = 42;

void (^show)(int a) = ^(int a){

      NSLog(@"aa = %d",aa);

}

aa = 50;

show(34);

打印结果: aa = 50

aa是一个局部变量,存储在栈区的。给aa加入__block修饰符所起到的作用就是只要观察到该变量被block所持有,就将该变量在栈中的内存地址放到堆中,此时不管block外部还是内部aa的内存地址都是一样的,进而不管在block外部还是内部都可以修改aa变量的值,所以aa = 50之后,在block输出的值就是50了。

相关文章

  • swift 调用 OC中的block

    OC中声明block; OC中实现block swift中实现

  • Swift 之闭包

    闭包 闭包类似于 OC 的 block,但是比 OC 的 block 应用面更广 在 OC 中 block 是匿名...

  • OC-简单粗暴理解Block的本质

    block简单粗暴的理解 OC的block底层就是个OC对象,包含isa指针,封装了函数的调用. OC的block...

  • iOS Block本质笔记

    OC中定义block block访问外部参数 OC转C++分析 block的变量捕获机制 为了保证block能够正...

  • Swift之闭包

    前言 闭包类似于OC的block,但是比OC的block应用面更广 在OC中block是匿名函数 在swift中函...

  • iOS&Swift&OC 闭包和Block的相互转化

    一、Swift的闭包 -> OC的block 二、OC的block -> Swift的闭包

  • iOS原生&JS交互

    OC 获取js中的key OC调用js方法 JS调用OC中不带参数的block JS调用OC中带参数的block ...

  • Block 与 Closure

    Block In OC block 分为以下三种: _NSConcreteStackBlock:栈block,引用...

  • iOS_Block

    block的本质其实就是OC对象, Block是oc的一段代码块,在需要的时候调用。 Block变量的声明格式为:...

  • OC中block底层原理总结(下)

    关于OC中block的本质结构、block的变量捕获方式请查看OC中block底层原理总结(上)需要先看懂上篇文章...

网友评论

      本文标题:OC block

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