
iOS源码学习
文章平均质量分 95
关于学习iOS的底层实现以及第三方库源码内容
Zdsey
Life is full of adventures and exchanges at every turn.
展开
-
iOS-关联对象(Objective-C)
本来在这个系列的文章中并不会涉及关联对象这个话题,不过,有人问过我这么一个问题:在分类中到底能否实现属性?其实在回答这个问题之前,首先要知道到底属性是什么?而属性的概念决定了这个问题的答案。如果你把属性理解为通过方法访问的实例变量,我相信这个问题的答案是不能,因为分类不能为类增加额外的实例变量。不过如果属性只是一个存取方法以及存储值的容器的集合,那么分类是可以实现属性的。分类中对属性的实现其实只是实现了一个看起来像属性的接口而已。原创 2023-04-16 21:43:48 · 1171 阅读 · 0 评论 -
【iOS】对象的本质探索
Class对象其实是一个指向objc_class结构体的指针。因此我们可以说类对象或元类对象在内存中其实就是objc_class结构体。原创 2023-07-18 17:03:05 · 866 阅读 · 0 评论 -
【iOS】探索ARC的实现
现在`release`也很好理解了:1. 依旧是判断是否为`taggedPointer`,如果是,直接返回`false`,不需要`dealloc`2. 判断是否有优化 如果没有 就直接操作散列表,使引用计数-13. 判断是引用计数为否为0 如果是0则执行`dealloc`流程4. 若`isa`有优化,则对象的`isa`位存储的引用计数减一,且通过carry判断是否向下溢出了 结果为负数(下图有点问题 应该是判断是有向下溢出),如果是,如果到-1 就放弃`newisa`改为`old`,并将散列表中一半原创 2023-07-17 15:06:33 · 1660 阅读 · 1 评论 -
【iOS】消息传递与消息转发
苹果认为如果一个方法被调用了,那个这个方法有更大的几率被再此调用,既然如此直接维护一个缓存列表,把调用过的方法加载到缓存列表中,再次调用该方法时,先去缓存列表中去查找,如果找不到再去方法列表查询。这样避免了每次调用方法都要去方法列表去查询,大大的提高了速率OC方法调用的本质就是消息发送,消息发送是SEL-IMP的查找过程。原创 2023-07-14 16:12:30 · 2452 阅读 · 0 评论 -
【iOS】Blocks
Blocks可简单概括为:带有自动变量(局部变量)的匿名函数在使用Blocks时,可以不声明C++类和Objective-C类,也没有使用静态变量、静态全局变量或全局变量时的问题,仅用编写C语言函数的源代码量即可使用带有自动变量值的匿名函数。对于“带有自动变量值的匿名函数”这一概念并不仅指Blocks。它还存在于许多其他程序语言中。在计算机科学中,此概念也称为闭包(Closure)、lambda计算(λ计算)等。原创 2023-03-05 20:45:57 · 549 阅读 · 0 评论 -
【iOS】AFNetworking源码解析--请求实现(二)
上一篇聊了有关NSURLSessionDataTask实例化的相关过程的实现以及为任务添加代理和通知观察,接下来我们看看代理和进度之间的关系以及通知的作用。原创 2023-05-15 21:51:13 · 753 阅读 · 1 评论 -
【iOS】AFNetworking源码解析--请求实现(一)
AFNetworking是iOS、macOS、watchOS和tvOS的一个令人愉快的网络库。它建立在基础URL加载系统之上,扩展了构建到Cocoa中的强大的网络高级抽象。它有一个模块化的体系结构,具有设计良好、功能丰富的API,使用起来很愉快。然而,也许最重要的特点是,每天都在使用AFNetworking并为其做出贡献的开发人员组成了一个令人惊叹的社区。AFNetworking为iPhone、iPad和Mac上一些最受欢迎、广受好评的应用提供了动力。原创 2023-04-30 21:00:32 · 1286 阅读 · 1 评论