美文网首页
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