首页
AI Coding
NEW
沸点
课程
直播
活动
AI刷题
APP
插件
搜索历史
清空
创作者中心
写文章
发沸点
写笔记
写代码
草稿箱
创作灵感
查看更多
会员
登录
注册
oc 底层原理分析
湘江Coder
创建于2021-05-13
订阅专栏
主要从oc 的角度分析iOS 底层原理知识
等 8 人订阅
共51篇文章
创建于2021-05-13
订阅专栏
默认顺序
默认顺序
最早发布
最新发布
OC-底层原理-19:Method-Swizzling-方法交换
而AOP是面向切面进行提取封装,提取各个模块中的公共部分,提高模块的复用率,降低业务之间的耦合性。 在iOS中NSNumber、NSArray、NSDictionary等这些类都是类簇,一个NSArray的实现可能由多个类组成。所以如果想对NSArray进行Swizzling,…
OC-底层原理-18:类扩展-与-关联对象-底层原理探索
本文的主要目的是针对类的加载的一个扩展,主要讲讲类拓展和分类的底层实现原理【面试题】类扩展 与 分类 的区别1、category 类别、分类专门用来给类添加新的方法不能给类添加成员属性,添加了成员属性
KVC实现原理
#一. 成员变量、实例变量、属性 根据了解,@property标签主要就是用来帮大家生成get\set方法还能管理内存,但是在xcode4.4之前是需要配合一个叫@synthsize的标签才能合成set\get方法,这么说,也就是说看上去我们只写了一个@property其实系统…
iOS-消息发送查找&转发流程
• 检查selector是否是垃圾回收方法,则将 IMP 结果设为 _objc_ignored_method。如果是则填充缓存_cache_fill(cls, (Method)entryp, sel);(这里entryp的类型是结构体cache_entry,将其强转为Metho…
Category方法加载原理
category是Objective-C 2.0之后添加的语言特性. category的主要作用是为已经存在的类添加方法. load_images:app在编译完成之后producet里面就会有可执行文件。通过mach-O的分析会发现在Function Starts中已经通过m…
类&分类的加载
分类直接在编译时加载到了类的 ro 里面,然后在运行时被拷贝到了类的 rw 里面. 分类的加载其实跟类的懒加载与否并没有关系,也就是说懒加载的分类都是在编译时期被加载的。 调用了 realizeClassWithoutSwift 方法来加载类的。而上面的 _getObjc2No…
+load方法原理解析
1.1.2. 开始遍历 schedule_class_load 1.1.3. schedule_class_load(cls->superclass);递归的方式调用父类的load方法 1.1.4. add_class_to_loadable_list(cls);把这个类的lo…
+initialize方法的原理
IMP lookUpImpOrForward(id inst, SEL sel, Class cls, int behavior){const IMP forward_imp = (IMP)_objc
UIView-CALayer渲染的触发时机
1. 测试触发时机 为了探究渲染的触发时机,我们自定义一个TestView并复写 drawRect: 方法。 我们在 drawRect: 方法中设置一个断点,然后运行我们的测试代码。 刚运行起来就会进入断点,我们在 lldb 中使用 bt 打印一下调用栈。 ~~从调用栈我们可以…
runtime方法交换
``` #import "UIImage+customer.h" #import @implementation UIImage (customer) + (void)load{ /** * 我们在这
Runtime底层原理分析
一个是legacy Version版本。早期版本Objective-C 1.0 32位的Mac OSX的平台 一个是Modern Version版本。现行版本iPhone程序和Mac OS X V10.5以后的64系统 No implementation found. Try …
RunLoop底层原理
Run loops are part of the fundamental infrastructure associated with threads. A run loop is an event processing loop that you use to schedu…
OC底层原理-17:类的加载(下)
在上一篇文章iOS-底层原理 17:类的加载(上)中,理解了类是如何从Mach-O加载到内存中,这次我们来解释下分类是如何加载到类中的,以及分类和类搭配使用的情况分类的本质前提:在main中定义LGp
OC底层原理-16:类的加载(上)
map_images是 引用类型,外界变了,跟着变。 如下所示,sels[i]与sel字符串一致,但是地址不一致,所以需要调整为一致的。即fix up,可以通过打印调试显示如下 rw 表示 readWrite,即可读可写,由于其动态性,可能会往类中添加属性、方法、添加协议,在最…
OC底层原理-15:dyld与objc的关联
DYLD_PRINT_STATISTICS:设置 DYLD_PRINT_STATISTICS 为YES,控制台就会打印 App 的加载时长,包括整体加载时长和动态库加载时长,即main函数之前的启动时间(查看pre-main耗时),可以通过设置了解其耗时部分,并对其进行启动优化…
OC底层原理-14-dyld加载流程
下面根据这个问题,我们来探索在走到main之前,到底还做了什么。 在分析app启动之前,我们需要先了解iOSapp代码的编译过程以及动态库和静态库。 静态库:在链接阶段,会将可汇编生成的目标程序与引用的库一起链接打包到可执行文件当中。此时的静态库就不会在改变了,因为它是编译时被…
OC底层原理-13:消息流程分析之-动态方法决议-&-消息转发
看着objc_defaultForwardHandler有没有很眼熟,这就是我们在日常开发中最常见的错误:没有实现函数,运行程序,崩溃时报的错误提示。 下面,我们来讲讲如何在崩溃前,如何操作,可以防止方法未实现的崩溃。 这种方式的实现,正好与源码中针对类方法的处理逻辑是一致的,…
OC底层原理-12:objc_msgSend消息流程分析之慢速查找
看着objc_defaultForwardHandler有没有很眼熟,这就是我们在日常开发中最常见的错误:没有实现函数,运行程序,崩溃时报的错误提示。
OC底层原理-11:objc_msgSend流程分析之快速查找
发现不论是[person sayHello]还是objc_msgSendSuper都执行的是父类中sayHello的实现,所以这里,我们可以作一个猜测:方法调用,首先是在类中查找,如果类中没有找到,会到类的父类中查找。
OC底层原理-10:objc_class-中-cache-原理分析
由上图可知,在没有执行方法调用时,此时的cache是没有缓存的,执行了一次方法调用,cache中就有了一个缓存,即调用一次方法就会缓存一次方法。
下一页