SF
iOS 源代码解析
iOS 源代码解析
注册登录
关注博客
注册登录
主页
关于
RSS
预加载与智能预加载(iOS)
draveness
2016-11-09
阅读 16 分钟
4.5k
前两次的分享分别介绍了 ASDK 对于渲染的优化以及 ASDK 中使用的另一种布局模型;这两个新机制的引入分别解决了 iOS 在主线程渲染视图以及 Auto Layout 的性能问题,而这一次讨论的主要内容是 ASDK 如何预先请求服务器数据,达到看似无限滚动列表的效果的。
谈谈 DSL 以及 DSL 的应用(以 CocoaPods 为例)
draveness
2016-10-08
阅读 9 分钟
6.5k
最近在公司做了一次有关 DSL 在 iOS 开发中的应用的分享,这篇文章会简单介绍这次分享的内容。 因为 DSL 以及 DSL 的界定本身就是一个比较模糊的概念,所以难免有与他人观点意见相左的地方,如果有不同的意见,我们可以具体讨论。
从 Auto Layout 的布局算法谈性能
draveness
2016-09-01
阅读 10 分钟
4.3k
在上一篇文章中,我们提到了 iOS 界面的渲染过程以及如何对渲染过程进行优化。ASDK 的做法是将渲染绘制的工作抛到后台线程进行,并在每次 Runloop 结束时,将绘制结果交给 CALayer 进行展示。
使用 ASDK 性能调优 - 提升 iOS 界面的渲染性能
draveness
2016-08-25
阅读 24 分钟
5.3k
这一系列的文章会从几个方面对 ASDK 在性能调优方面策略的实现进行分析,帮助读者理解 ASDK 如何做到使复杂的 UI 界面达到 60 FPS 的刷新频率的;本篇文章会从视图的渲染层面讲解 ASDK 对于渲染过程的优化并对 ASDK 进行概述。
iOS 开发中使用 NSURLProtocol 拦截 HTTP 请求
draveness
2016-08-17
阅读 5 分钟
9.6k
这篇文章会提供一种在 Cocoa 层拦截所有 HTTP 请求的方法,其实标题已经说明了拦截 HTTP 请求需要的了解的就是 NSURLProtocol。
如何在 Objective-C 中实现协议扩展
draveness
2016-08-15
阅读 9 分钟
4.2k
Swift 中的协议扩展为 iOS 开发带来了非常多的可能性,它为我们提供了一种类似多重继承的功能,帮助我们减少一切可能导致重复代码的地方。
iOS 中的 block 是如何持有对象的
draveness
2016-08-10
阅读 10 分钟
4.4k
Block 是 Objective-C 中笔者最喜欢的特性,它为 Objective-C 这门语言提供了强大的函数式编程能力,而最近苹果推出的很多新的 API 都已经开始原生的支持 block 语法,可见它在 Objective-C 中变得越来越重要。
对象是如何初始化的(iOS)
draveness
2016-08-08
阅读 4 分钟
3.2k
在之前,我们已经讨论了非常多的问题了,关于 objc 源代码系列的文章也快结束了,其实关于对象是如何初始化的这篇文章本来是我要写的第一篇文章,但是由于有很多前置内容不得不说,所以留到了这里。
如何实现 iOS 中的 Associated Object
draveness
2016-08-03
阅读 6 分钟
2.5k
这一篇文章是对 FBRetainCycleDetector 中实现的关联对象机制的分析;因为追踪的需要, FBRetainCycleDetector 重新实现了关联对象,本文主要就是对其实现关联对象的方法进行分析。
检测 NSObject 对象持有的强指针
draveness
2016-08-02
阅读 13 分钟
6.3k
在上一篇文章中介绍了 FBRetainCycleDetector 的基本工作原理,这一篇文章中我们开始分析它是如何从每一个对象中获得它持有的强指针的。
如何在 iOS 中解决循环引用的问题
draveness
2016-07-30
阅读 8 分钟
3.8k
稍有常识的人都知道在 iOS 开发时,我们经常会遇到循环引用的问题,比如两个强指针相互引用,但是这种简单的情况作为稍有经验的开发者都会轻松地查找出来。
动态修改 C 语言函数的实现
draveness
2016-07-26
阅读 16 分钟
6.5k
Objective-C 作为基于 Runtime 的语言,它有非常强大的动态特性,可以在运行期间自省、进行方法调剂、为类增加属性、修改消息转发链路,在代码运行期间通过 Runtime 几乎可以修改 Objecitve-C 层的一切类、方法以及属性。
如何在 Objective-C 的环境下实现 defer
draveness
2016-07-19
阅读 4 分钟
3.2k
这篇文章会对 libextobjc 中的一小部分代码进行分析,也是如何扩展 Objective-C 语言系列文章的第一篇,笔者会从 libextobjc 中选择一些黑魔法进行介绍。
『零行代码』解决键盘遮挡问题(iOS)
draveness
2016-06-22
阅读 14 分钟
5.3k
最近在项目中使用了 IQKeyboardManager 来解决 UITextField 被键盘遮挡的问题,这个框架的使用方法可以说精简到了极致,只需要将 IQKeyboardManager 加入 Podfile,然后 pod install 就可以了。
关联对象 AssociatedObject 完全解析
draveness
2016-06-09
阅读 15 分钟
5k
我们在 iOS 开发中经常需要使用分类(Category),为已经存在的类添加属性的需求,但是使用 @property 并不能在分类中正确创建实例变量和存取方法。
黑箱中的 retain 和 release
draveness
2016-05-30
阅读 8 分钟
4.6k
关注仓库,及时获得更新:iOS-Source-Code-Analyze Follow: Draveness · Github 由于 Objective-C 中的内存管理是一个比较大的话题,所以会分为两篇文章来对内存管理中的一些机制进行剖析,一部分分析自动释放池以及 autorelease 方法,另一部分分析 retain、release 方法的实现以及自动引用计数。
神奇的 BlocksKit (一)
draveness
2016-05-26
阅读 16 分钟
4.7k
高能预警:本篇文章非常长,因为 BlocksKit 的实现还是比较复杂和有意的。这篇文章不是为了剖析 iOS 开发中的 block 的实现以及它是如何组成甚至使用的,如果你想通过这篇文章来了解 block 的实现,它并不能帮到你。
自动释放池的前世今生
draveness
2016-05-16
阅读 11 分钟
4.9k
关注仓库,及时获得更新:iOS-Source-Code-Analyze Follow: Draveness · Github 由于 Objective-C 中的内存管理是一个比较大的话题,所以会分为两篇文章来对内存管理中的一些机制进行剖析,一部分分析自动释放池以及 autorelease 方法,另一部分分析 retain、release 方法的实现以及自动引用计数。
上古时代 Objective-C 中哈希表的实现
draveness
2016-05-07
阅读 17 分钟
7.5k
关注仓库,及时获得更新:iOS-Source-Code-AnalyzeFollow: Draveness · Github 因为 ObjC 的 runtime 只能在 Mac OS 下才能编译,所以文章中的代码都是在 Mac OS,也就是 x86_64 架构下运行的,对于在 arm64 中运行的代码会特别说明。
成熟的夜间模式解决方案
draveness
2016-05-04
阅读 7 分钟
7k
在正式介绍目前版本的实现之前,我会先简单介绍一下 1.0 时代的 DKNightVersion 的实现,为各位读者带来一些新的思路,也确实想梳理一下这个框架是如何演变的。
懒惰的 initialize 方法
draveness
2016-04-30
阅读 6 分钟
4k
关注仓库,及时获得更新:iOS-Source-Code-AnalyzeFollow: Draveness · Github 因为 ObjC 的 runtime 只能在 Mac OS 下才能编译,所以文章中的代码都是在 Mac OS,也就是 x86_64 架构下运行的,对于在 arm64 中运行的代码会特别说明。
你真的了解 load 方法么?
draveness
2016-04-28
阅读 12 分钟
6.5k
关注仓库,及时获得更新:iOS-Source-Code-AnalyzeFollow: Draveness · Github 因为 ObjC 的 runtime 只能在 Mac OS 下才能编译,所以文章中的代码都是在 Mac OS,也就是 x86_64 架构下运行的,对于在 arm64 中运行的代码会特别说明。
AFNetworking 概述(一)
draveness
2016-04-28
阅读 5 分钟
17.4k
在这一系列的文章中,我会对 AFNetworking 的源代码进行分析,深入了解一下它是如何构建的,如何在日常中完成发送 HTTP 请求、构建网络层这一任务。
从源代码看 ObjC 中消息的发送
draveness
2016-04-26
阅读 13 分钟
3.4k
因为 ObjC 的 runtime 只能在 Mac OS 下才能编译,所以文章中的代码都是在 Mac OS,也就是 x86_64 架构下运行的,对于在 arm64 中运行的代码会特别说明。
从 NSObject 的初始化了解 isa
draveness
2016-04-23
阅读 9 分钟
3.6k
因为 ObjC 的 runtime 只能在 Mac OS 下才能编译,所以文章中的代码都是在 Mac OS,也就是 x86_64 架构下运行的,对于在 arm64 中运行的代码会特别说明。
深入分析 ObjC 中方法的结构
draveness
2016-04-23
阅读 11 分钟
9.7k
因为 ObjC 的 runtime 只能在 Mac OS 下才能编译,所以文章中的代码都是在 Mac OS,也就是 x86_64 架构下运行的,对于在 arm64 中运行的代码会特别说明。