iOS基础·OC高级篇iOS软件重构与设计模式简友广场

iOS知识复习笔记(8)---block底层原理

2023-01-12  本文已影响0人  焦下客

block 类型

在MRC环境下

1.全局block:如果没有使用外部auto变量,或者只使用全局变量或是静态变量,则是全局block

2.栈block:如果使用了外部auto变量,则是栈block

3.堆block:栈block调用了copy

在ARC环境下

1.全局block:如果没有使用外部auto变量,或者只使用全局变量或是静态变量,则是全局block

2.栈block:如果使用了外部auto变量,会从栈block拷贝到堆block

3.堆block:访问了外部auto变量的block,并进行的copy操作

auto 修饰变量,block会捕获,并且是值传递,内部无法修改值。

static 修饰变量,block会捕获,并且是指针传递,内部可以修改值。

全局变量,block不会捕获,是直接获取值。

使用__weak 修饰可以解决循环引用问题

使用__block 修饰auto变量,内部是变成一个结构体,结构体内部包含变量的指针,所以就可以实现在block内部修改auto变量的值了。

上一篇下一篇

猜你喜欢

热点阅读