底层源码分析
文章平均质量分 81
底层源码分析
洋洋dev
别在机场等一艘船
展开
-
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 · 636 阅读 · 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 · 862 阅读 · 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 · 359 阅读 · 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 · 444 阅读 · 0 评论 -
weak源码分析流程图
前言本篇weak源码分析流程图,用来辅助理解weak源码。storeWeakweak_unregister_no_lockweak_entry_for_referentremove_referrerweak_entry_removeweak_entry_insertweak_register_no_lockappend_referrergrow_refs_and_insertweak_grow_maybeweak_resize...原创 2021-12-19 13:31:05 · 239 阅读 · 0 评论 -
weak实现原理
weak 实现原理下面的一段代码是我们在开发中常见的weak的使用- (void)viewDidLoad { [super viewDidLoad]; NSObject *obj = [[NSObject alloc] init]; __weak NSObject *weakp = obj;}汇编runtime调用objc_initWeakobjc_initWeak(&weakp, obj);objc_initWeak源码id objc_initWea原创 2021-12-19 13:30:31 · 1353 阅读 · 0 评论 -
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 · 879 阅读 · 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 · 779 阅读 · 0 评论