Skip to content

Latest commit

 

History

History
62 lines (34 loc) · 1.52 KB

Block面试题.md

File metadata and controls

62 lines (34 loc) · 1.52 KB

Block的种类

查看答案
  • NSGlobaleBlock

    全局的Block.未使用局部变量的Block

  • NSMallocBlock

    在进程堆创建的Block 通过Copy之后的Block

  • NSStackBlock

    在进程栈创建的Block,使用局部变量并未copy操作的

为什么在默认情况下无法修改被block捕获的变量? __block都做了什么

查看答案

因为默认情况下,Block会将访问的变量的值copy一份值而不是变量的内存地址到Block结构体中。从而默认在Block默认情况下无法修改外部变量的值。

Block访问__block修饰的变量,会通过__forwarding基数将外部的变量copy一份内存地址到Block结构体内部,从而可以修改外部的变量。

什么是block

查看答案

Block是对象,封装了一块代码,可以在任何时候运行。Block可以作为方法参数,也可以作为方法返回值。自己又带有参数和返回值,和代理的功能相同。

使用block和使用delegate有什么不同

查看答案
  • Block

代码更加的紧凑,使用方便

  • Delegate

    方法语义明显,适合作为作为第三方接口

__block和__weak修饰符的区别

查看答案

__block 修饰的变量可以在Block内部进行修改,__weak修饰的对象可以在Block使用防止循环引用。