上一页 1 ··· 6 7 8 9 10 11 12 13 14 15 下一页

2020年12月2日

016*:方法交换Method-Swizzling?(1:一次性问题:load或者initialize 2: 子类不和父类方法。)

摘要: 问题 1:一次性问题:load或者initialize 2: 子类不和父类方法。 目录 1:method-swizzling 是什么? 2:注意: 3:method-swizzling - 类方法 4:method-swizzling的应用 预备 测试代码:HTRuntimeTool类:负责方法交换 阅读全文

posted @ 2020-12-02 23:50 风zk 阅读(202) 评论(0) 推荐(0) 编辑

015*:面试题

摘要: 一:Runtime Asssociate方法关联的对象,需要在dealloc中释放? 不需要 当我们对象释放时,会调用dealloc 1、C++函数释放 :objc_cxxDestruct 2、移除关联属性:_object_remove_assocations 3、将弱引用自动设置nil:weak_ 阅读全文

posted @ 2020-12-02 22:52 风zk 阅读(96) 评论(0) 推荐(0) 编辑

014*:分类和类扩展和关联属性-(AssociationsHashMap-ObjectAssociationMap)

摘要: 关联对象本质 关联对象底层实现:**其实就是两层哈希map , 存取的时候两层处理**。 第一层:类名object:bucket【AssociationsHashMap】 第二层:key:ObjcAssociation(value和policy)【ObjectAssociationMap】 1: C 阅读全文

posted @ 2020-12-02 19:31 风zk 阅读(288) 评论(0) 推荐(0) 编辑

013:分类的加载:realizeClassWithoutSwift -> methodizeClass -> attachToClass ->load_categories_nolock->attachCategories, loadImage的加载

摘要: 问题 懒加载分类会在编译器把数据加载 只要有非懒加载分类会走attachCategories来加载分类数据 1:methodizeClass内部有对分类的处理 2:attachToClass 3:attachCategories函数:绑定分类。 4:extAllocIfNeeded:-> extAl 阅读全文

posted @ 2020-12-02 17:10 风zk 阅读(214) 评论(0) 推荐(0) 编辑

012:类的加载上:mapImage-[readClass->UnfixedSelectors->readProtocol]->realizeClassWithoutSwift->[methodizeClass->prepareMethodLists->fixupMethodList]->attachCategories)、loadImage(加载load方法),

摘要: 问题 readImage->(readClass->UnfixedSelectors->readProtocol)->realizeClassWithoutSwift->methodizeClass->attachCategories) 1: readImage 2:readClass->Unfix 阅读全文

posted @ 2020-12-02 13:36 风zk 阅读(238) 评论(0) 推荐(0) 编辑

011:dyld和objc的关联-(_dyld_objc_notify_register-registerObjCNotifiers-sNotifyObjCInit-map_images-load_images-unmap_image)

摘要: 问题 目录 预备 正文 一:_objc_init 源码解析 void _objc_init(void) { static bool initialized = false; if (initialized) return; initialized = true; // fixme defer ini 阅读全文

posted @ 2020-12-02 10:57 风zk 阅读(204) 评论(0) 推荐(0) 编辑

2020年12月1日

010:dyld加载流程-(_dyld_start-dyldbootstrap::start-dyld::_main-dyld::initializeMainExecutable-ImageLoader::runInitializers-ImageLoader::processInitializers-ImageLoader::recursiveInitialization)

摘要: 问题 目录 预备 正文 1:main、load、C++ 的执行顺序 __attribute__((constructor)) void htFunc() { printf("%s \n",__func__); } @interface HTPerson : NSObject @end @implem 阅读全文

posted @ 2020-12-01 21:13 风zk 阅读(433) 评论(0) 推荐(0) 编辑

009:消息流程分析-动态方法决议&消息转发-[resolveInstanceMethod-forwardingTargetForSelector-methodSignatureForSelector-forwardInvocation]

摘要: 问题 1:动态方法决议调用次数? 目录 1:消息发送的流程 2:动态方法决议 3: 消息转发 预备 正文 一:消息发送的流程 1:先去本类的缓存方法列表中查找,核心函数是CacheLookup 2:如果没有找到,就去本类的方法列表中查找, 3:如果当前方法列表还是没有,就通过 superClass指 阅读全文

posted @ 2020-12-01 17:48 风zk 阅读(651) 评论(0) 推荐(0) 编辑

008:消息流程分析之慢速查找-[lookUpImpOrForward-findMethodInSortedMethodList-cache_getImp-resolveInstanceMethod]

摘要: 问题 目录 预备 正文 一:方法的查找顺序 1:实例对象、类对象、元类对象以及根元类对象。它们是通过一个叫 isa 的指针来关联起来。那么消息的慢速查找就是依靠这种关系来进行的。 对象的实例方法的查找(类对象) 自己有找自己的 自己没有 - 找父类的自己没有 - 父类也没有 - NSObject自己 阅读全文

posted @ 2020-12-01 15:49 风zk 阅读(272) 评论(0) 推荐(0) 编辑

007:消息流程分析之快速查找-CacheLookup-【isa-objc_msgSend -CacheLookup-[Cachehit CheckMiss JumpMiss]-__objc_msgSend_uncached-MethodTableLookup-lookUpImpOrForward】

摘要: 问题 1:objc_msgSend原理是什么? 1: objc_msgSend-->> 2: GetClassFromIsa_p16-->> 3: CacheLookup-->> 4: 成功(Cachehit),匹配失败,触发CheckMiss和JumpMiss流程-->> 5: __objc_ms 阅读全文

posted @ 2020-12-01 00:01 风zk 阅读(255) 评论(0) 推荐(0) 编辑

2020年11月30日

006:cache_t-(buckets[sel imp]、mask、flag、occupied)-【cache_insert(散列表,3/4两倍扩容)】

摘要: 问题 1:缓存的流程 msg_send-->>cache_fill-->>cache_insert -->>_occupied+1-->> -->>reallocate-->>cache_collect_free-->>_garbage_make_room -->>扩容-->>(散列表)存储sel和 阅读全文

posted @ 2020-11-30 21:53 风zk 阅读(110) 评论(0) 推荐(0) 编辑

005:类原理分析下

摘要: 问题 目录 1:class_ro_t-->>class_rw_t-->>class_rw_ext_t 2:iskindOfClass & isMemberOfClass 的理解 3:class_getClassMethod源码 预备 正文 1:class_ro_t-->>class_rw_t-->> 阅读全文

posted @ 2020-11-30 18:44 风zk 阅读(136) 评论(0) 推荐(0) 编辑

004:类原理分析(上):类(isa、superclass、cache、bits[class_ro_t class_rw_t class_rw_ext_t])

摘要: 问题 1:为什么元类是唯一的? 2: isa走位图 2: class_rw_o和class_rw_t的区别 目录 1:isa走位图 2:元类 3:isa走位图 4:OC对象的本质 5:获取属性列表 6:方法列表 7:获取成员变量 8:类方法的存储 9:类的信息是如何存储的 10:class_ro_t 阅读全文

posted @ 2020-11-30 16:46 风zk 阅读(177) 评论(0) 推荐(0) 编辑

003:对象原理下-isa指针(isa[联合体位域]->class、bits->shiftcls)

摘要: 问题 1:_objc_initInstanceIsa的流程三部曲 2:isa为什么是8字节 3:isa流程图 目录 1:oc对象本质 2:探索objc_setProperty原理 3:结构体和联合体位域 4:源码查找isa指针 5:isa指针位域具体信息 6:isa关联地址和类的过程 7:关联的验证 阅读全文

posted @ 2020-11-30 11:10 风zk 阅读(376) 评论(1) 推荐(0) 编辑

002:对象原理中-内存对齐,结构体内存对齐: sizeof class_getInstanceSize malloc_size

摘要: 问题 1:为什么要内存对齐 2:为什么要内存重排 3:内存计算 目录 1:为什么要内存对齐 2:内存对齐规则 3:单个结构体内存对齐 4:结构体嵌套结构体 5: 内存优化 6:属性重排 7:instanceSize方法的底层实现 8:8字节和16字节对齐 预备知识 1:lldb调试指令 po 打印信 阅读全文

posted @ 2020-11-30 00:28 风zk 阅读(220) 评论(0) 推荐(0) 编辑

2020年11月29日

000*:OC底层原理目录

摘要: 1:对象原理上-alloc流程 objc源码 2:对象原理中-内存对齐 llvm源码 博客: 一:底层原理 1:月月:Style_月月:https://www.jianshu.com/p/412b20d9a0f6 2:markhetao:OC底层原理 学习大纲:https://www.jianshu 阅读全文

posted @ 2020-11-29 22:31 风zk 阅读(386) 评论(0) 推荐(0) 编辑

2020年11月11日

001:对象原理上-alloc流程->cllass_createInstanceFromZone 1:cls->instanceSize 2:calloc 3: obj->initInstanceIsa

摘要: 目录 1:底层原理探索方法 2:对象地址和指针地址 * 3:苹果源码 4:alloc的流程 *** 5:alloc的作用 ** 6:属性影响分配内存大小 * 7:alloc init new 方法的区别 问题 1: p1、p2、p3对象和地址打印都一致, 为何&p打印不一致 alloc是真正开辟内存 阅读全文

posted @ 2020-11-11 18:53 风zk 阅读(198) 评论(0) 推荐(0) 编辑

2020年6月8日

05:LLDB

摘要: LLDB Low lever debug 轻量级的调试工具 1:lldb下断点 1.1: lldb给函数下断点 breakpoint set -n test1 -n 是方法的名字 1.2:给方法下断点 breakpoint set -n “[viewController save:]” -n “[v 阅读全文

posted @ 2020-06-08 11:22 风zk 阅读(138) 评论(0) 推荐(0) 编辑

2020年5月29日

04:MachO文件

摘要: 复习 1:macho文件 2:通用二进制文件 3:macho文件格式 4:dyld加载流程 目录 1:macho文件 2:通用二进制文件 3:macho文件格式 4:dyld加载流程 正文 一:macho文件】 1:mach-O文件 dylib:动态库 dyld: 动态连接器 Dysm:具有调试信息 阅读全文

posted @ 2020-05-29 15:35 风zk 阅读(463) 评论(0) 推荐(0) 编辑

2020年5月22日

03:双层签名和重签名流程以及shell脚本重签名

摘要: 复习 1:双向签名7不流程 2:查看签名信息和证书信息 3:查看用户权限 4:shell脚本签名 目录 1:双向签名7不流程 2:查看签名信息和证书信息 3:查看用户权限 4:shell脚本签名 正文 一:双层签名、双向验证 双层签名、双向验证。 1:签名示意图 2:两对秘钥、双层签名、双向认证 公 阅读全文

posted @ 2020-05-22 17:06 风zk 阅读(2149) 评论(0) 推荐(0) 编辑

上一页 1 ··· 6 7 8 9 10 11 12 13 14 15 下一页

导航