随笔分类 -  12:OC底层知识和面试

isa、class、cache、msg_send、llvb启动流程、object_init、mapImage、loadImage、kvc、kvo、pthread、NSThread、NSOperation、GCD、@synchronized、NSLock、NSCondition、LLVM、Clang、二进制重排、内存管理、组件化、MVC、MVVM+RAC、MVP
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 阅读(227) 评论(0) 推荐(0)

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 阅读(504) 评论(0) 推荐(0)

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

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

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

posted @ 2020-12-01 15:49 风zk 阅读(301) 评论(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 阅读(268) 评论(0) 推荐(0)

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 阅读(122) 评论(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 阅读(149) 评论(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 阅读(202) 评论(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 阅读(446) 评论(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 阅读(256) 评论(0) 推荐(0)

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 阅读(396) 评论(0) 推荐(0)

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 阅读(214) 评论(0) 推荐(0)

054* OC常见设计模式--23中设计模式(代理模式,观察者模式,单例模式,MVC,工厂模式,迭代器模式)
摘要:1:代理模式:当一个类的某些功能需要由别的类来实现,但是又不确定具体会是哪个类实现。解耦 2:观察者模式:一般为model层对,controller和view进行的通知方式,不关心谁去接收,只负责发布信息。解耦 3:单例模式:确保程序运行期某个类,只有一份实例,用于进行资源共享控制。优势:使用简单, 阅读全文

posted @ 2019-08-26 11:38 风zk 阅读(168) 评论(0) 推荐(0)

044*:怎么防止别人反编译你的app?app混淆、app加固 、app加密
摘要:为什么要加固 引用:iOS APP安全加固方案(一、代码混淆CodeObfuscation) 1:iOS应用逆向常用工具 Reveal Cycript Class-dump Keychain-Dumper gdb iNalyzer introspy Fishhook removePIE IDA pr 阅读全文

posted @ 2019-08-24 11:18 风zk 阅读(503) 评论(0) 推荐(0)

034* (网络七层架构)(TCP三次握手和四次挥手)(TCP、UDP、SOCKET、http、Https)(单向认证和双向认证)(http状态码)
摘要:一:网络7层协议和主要协议 OSI 模型 主要协议 单位 作用 应用层 HTTP、FTP、Telnet、STMP、POP3、IMAP等 数据流 为应用程序提供访问网络服务的接口 表示层 CSS GIF HTML JSON XML GIF 数据流 数据格式转换、加密、压缩 会话层 FTP SSH TL 阅读全文

posted @ 2019-08-22 08:41 风zk 阅读(550) 评论(0) 推荐(0)

44 (OC)* 内存泄漏、什么情况下会出现内存泄漏、野指针、空指针、nil、NSNull、(僵尸对象、野指针、bad_access )
摘要:问题: 1:空指针、野指针、内存泄漏、常见的内存泄漏有哪些?怎样检测和防止内存泄漏 2:nil、Nil、NULL、NSNull的区别 ? 3:bad_access 僵尸对象 一:内存泄漏 程序中已动态分配的堆内存由于某种原因程序未释放或无法释放,造成系统内存的浪费,导致程序运行速度减慢甚至系统崩溃等 阅读全文

posted @ 2018-07-17 11:09 风zk 阅读(363) 评论(0) 推荐(0)

049*:什么是动态连接库?静态库?你有没有自己写过静态编译库,遇到了哪些问题?
摘要:一:介绍 动态库形式:.dylib和.framework 静态库形式:.a和.framework 动态库和静态库的区别 静态库:链接时,静态库会被完整地复制到可执行文件中,被多次使用就有多份冗余拷贝(图1所示) 系统动态库:链接时不复制,程序运行时由系统动态加载到内存,供程序调用,系统只加载一次,多 阅读全文

posted @ 2018-07-17 11:04 风zk 阅读(252) 评论(0) 推荐(0)

040*: Instruments
摘要:1.Blank(空模板):创建一个空的模板,可以从Library库中添加其他模板; 2.Activity Monitor(活动监视器):监控进程的CPU,内存,磁盘,网络使用情况 是程序在手机运行真正占用的内存大小 3.Allocations(内存分配):跟踪过程的匿名虚拟内存和堆的对象提供类名和可 阅读全文

posted @ 2018-07-17 10:17 风zk 阅读(116) 评论(0) 推荐(0)

042* APNS推送和第三方推送
摘要:1:APNS的推送机制 2:APNS推送通知的详细工作流程 3:准备工作 4:TCP长连接 5:消息格式 6:卸载后接受不到消息 1.APNS的推送机制 首先我们看一下苹果官方给出的对ios推送机制的解释。如下图 Provier 代表我们自己的应用服务器 APNs 代表苹果的APNS推送服务器 接着 阅读全文

posted @ 2018-07-17 10:00 风zk 阅读(791) 评论(0) 推荐(0)

058* RunTime(1: 动态方法交换:Method Swizzling 2:实现分类添加新属性 3:获取类的详细信息 4:动态添加方法 5:归档、解档 6:字典转模型 7:多继承 【protocol】)
摘要:目录: 应用场景 1: 动态方法交换:Method Swizzling 2:实现分类添加新属性 3:获取类的详细信息 4:动态添加方法 5:归档、解档 6:字典转模型 7:多继承 正文 一:总结 3.1:类的所有缓存都存在metaclass上,所以每个类都只有一份方法缓存,而不是每一个类的objec 阅读全文

posted @ 2018-07-17 09:56 风zk 阅读(189) 评论(0) 推荐(0)

导航