美文网首页
Block 笔记

Block 笔记

作者: 点雨 | 来源:发表于2018-08-23 11:19 被阅读1次

Block表达式语法:^ 返回值类型 (参数列表) {表达式}
声明Block类型变量语法:返回值类型 (^变量名)(参数列表) = Block表达式

block:我们称代码块,他类似一个方法。而每一个方法都是在被调用的时候从硬盘到内存,然后去执行,执行完就消失,所以,方法的内存不需要我们管理,也就是说,方法是在内存的栈区。所以,block不像OC中的类对象(在堆区),他也是在栈区的。如果我们使用block作为一个对象的属性,我们会使用关键字copy修饰他,因为他在栈区,我们没办法控制他的消亡,当我们用copy修饰的时候,系统会把该 block的实现拷贝一份到堆区,这样我们对应的属性,就拥有的该block的所有权。就可以保证block代码块不会提前消亡。

自动变量截获的值为Block声明时刻的瞬间值,保存后就不能改写该值,如需对自动变量进行重新赋值,需要在变量声明前附加__block说明符,这时该变量称为__block变量。

当自动变量为一个类的对象,且没有使用__block修饰时,虽然不可以在Block内对该变量进行重新赋值,但可以修改该对象的属性。
如果该对象是个Mutable的对象,例如NSMutableArray,则还可以在Block内对NSMutableArray进行元素的增删:

__block 全局变量 静态变量(static), block中都可修改其值,并调用block前修改其实新值;
局部变量,block中都不可修改其值,并调用block前修改其实旧值;

__block在MRC下有两个作用

  1. 允许在Block中访问和修改局部变量
  2. 禁止Block对所引用的对象进行隐式retain操作

__block在ARC下只有一个作用

  1. 允许在Block中访问和修改局部变量

block内部调用了延时函数,并且使用了弱指针,此时会找不到该指针,因为他已经被销毁,需要再block内部将弱指针重新引用。

iOS内存.png

相关文章

  • Block常见使用总结(传值/作为参数/作为返回值等)

    来做个block的笔记。 block定义 block类型 block传值 block作为参数的方法定义与调用 bl...

  • runtime 之给 button 添加 block 事件支持

    这只是简单的笔记UIButton+block.h UIButton+block.m 使用

  • Day7 读书笔记&心得体会

    一、读书笔记回顾昨天的收获:什么是block、proc? block和proc是两种不同的东西, block有形无...

  • Objective-C的Block

    声明:本文是读了 做的笔记,以及结合本人写的例子总结的Block知识。 目录 Block入门什么是Block如何定...

  • __block和非__block

    自己的笔记: NSString *text = @"test"; testBlock block = ^{ dis...

  • Block 笔记

    Block表达式语法:^ 返回值类型 (参数列表) {表达式}声明Block类型变量语法:返回值类型 (^变量名)...

  • block笔记

    1.我在一个类中声明了一个block属性:a类 定义如下: 这里用的是weak修饰的,表示我不会将block从本身...

  • block(笔记)

    oc 里面的block:block确实是个很好用的东西,简单的来说就是做完一个事情后要干些什么,用了block就么...

  • block 笔记

    block本质是OC对象(封装了函数调用以及调用环境的OC对象) 本质

  • block 笔记

    block简介 block 其实就是一个值,并且有类型。可以当做 int float 或者 Objective-C...

网友评论

      本文标题:Block 笔记

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