![](https://img-blog.csdnimg.cn/20190927151043371.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
【Block】
文章平均质量分 87
Block
洋洋dev
别在机场等一艘船
展开
-
block _forwarding指针
_forwarding指针上面提到__forwarding指针指向的是结构体自己,当使用变量的时候,通过结构体找到__forwarding指针,在通过__forwarding指针找到相应的变量 为什么要这么设计呢?这样设计的目的是为了方便内存管理当block在栈中时,__Block_byref_age_0结构体内的__forwarding指针指向结构体自己当block被复制到堆上时,会将block中引用的变量也复制到堆中而当block被复制到堆中时,栈中的__Block_byref_age_0原创 2021-12-12 21:00:00 · 867 阅读 · 0 评论 -
block的循环引用
前言block的循环引用Q: 为什么 block 会产生循环引用?相互循环引用:如果当前block对当前对象的某一成员变量进行捕获的话,可能会对它产生强引用。根据block的变量捕获机制,如果block被拷贝到堆上,且捕获的是对象类型的auto变量,则会连同其所有权修饰符一起捕获,所以如果对象是__strong修饰,则block会对它产生强引用(如果block在栈上就不会强引用)。而当前block可能又由于当前对象对其有一个强引用,就产生了相互循环引用的问题;总结必须同时满足2个条件1、 b原创 2021-12-11 11:50:42 · 3324 阅读 · 0 评论 -
block对copy的实现
对block进行copy经常会用到,block的copy底层是什么实现的?之前的文章介绍了block的数据结构和内存管理,本篇说一下block的copy实现。copy的范围case 1 // struct __main_block_impl_0 需要copy 示例代码int age = 6;void(^block)(void) = ^{ NSLog(@"a==%d",age);};case 2 // struct __main_block_impl_0 需要copy NSObje原创 2021-12-09 00:32:02 · 765 阅读 · 0 评论 -
block的内存管理
对比对象类型 生成的block变量结构体struct __Block_byref_obj2_1 { void *__isa;__Block_byref_obj2_1 *__forwarding; int __flags; int __size; void (*__Block_byref_id_object_copy)(void*, void*); void (*__Block_byref_id_object_dispose)(void*); NSObject *__strong obj2;原创 2021-12-07 18:07:27 · 625 阅读 · 0 评论 -
block变量捕获机制
本文打算分 基本类型和 对象类型 进行论述学习内容:基本数据类型例如:1、 捕获变量2、 __block 修改变量3、 block变量结构体3、 底层逻辑4、 __forwarding指针5、 尝试使用 __forwarding指针对象类型:1、 捕获变量2、 __block 修改变量3、 block变量结构体3、 底层逻辑4、 __forwarding指针5、强弱引用6、内存管理7、循环引用基本数据类型捕获变量int a = 1;static int b原创 2021-12-04 19:14:00 · 842 阅读 · 0 评论 -
block分类
介绍下block分类写一个全局block- (void)test { void(^yang1)(void) = ^ { }; yang1(); NSLog(@"%@",[yang1 class]);}打印2021-11-24 19:31:24.613795+0800 09_分类[42172:32561212] __NSGlobalBlock__写一个堆block (ARC)- (void)test2 { int age = 30; // ARC特原创 2021-12-02 18:19:38 · 354 阅读 · 0 评论 -
Clang看block底层结构
学习目标:疑问:block到底是什么1:block是oc对象2:block是指针block是oc对象: int age = 30; void (^yang)(void) = ^{ NSLog(@"%d", age); }; yang();clang转cppstruct __block_impl { void *isa; int Flags; int Reserved; void *FuncPtr;};st原创 2021-12-03 22:00:00 · 434 阅读 · 0 评论