诠释:封装函数及上下文的对象(匿名函数 其本质是结构体)
分类:__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参数,拿到结构体属性进行操作
网友评论