美文网首页
IOS 中 Block一探究竟

IOS 中 Block一探究竟

作者: 暴躁的小豆子 | 来源:发表于2019-09-26 17:48 被阅读0次

诠释:封装函数及上下文的对象(匿名函数 其本质是结构体)

分类:__NSMallocBlock__  堆

            __NSGlobalBlock__ 全局

            __NSStackBlock__  栈

 __NSGlobalBlock__ 全局

global

__NSMallocBlock__  堆

malloc

 __NSStackBlock__  栈

stack

                                                            二、循环引用


循环引用

这就是常见的循环引用,怎么解决呢--- 我认为用weak  看代码

截图

好像真的解决了,警告没有了,继续往下看

例:有A,B两个页面 ,我们在B界面写了一个Block,Block模块中有延迟操作,此时用户返回A界面

截图

此时name为null,这是为什么?

因为弱引用 在作用空间内 随时是可以释放的

继续

防止提前释放:在当前作用域内临时持有

__strongtypeof(self) strongSelf = weakSelf;

截图

                                                       方法||

__block 捕获局部变量法

截图

                                                                             方法|||

block传参


截屏

block 底层探究:

创建一个c文件,把终端切到c文件的目录下,gcc编译 ----> clang编译把oc代码转成c/c++代码以cpp后缀文件输出

1. gcc xxx.c 2.clang -rewrite-objc xxx.c -o xxx.cpp

截图 截图

__main_block_impl_0 这个就是block 真身 是一个结构体,有四项内容,如上如所示,下面我们用block捕获局部变量,再编译看有什么不同

截图

__block 把局部变量 包装成结构体对象,局部变量的指针,值 都赋值给了结构体,通过block结构体构造函数(block(结构体)内部也会生成一个结构体对象指针,并且赋值给block(结构体)的属性)block(结构体)执行属性函数,通过传递过去的block参数,拿到结构体属性进行操作

相关文章

网友评论

      本文标题:IOS 中 Block一探究竟

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