首页
AI Coding
NEW
沸点
课程
直播
活动
AI刷题
APP
插件
搜索历史
清空
创作者中心
写文章
发沸点
写笔记
写代码
草稿箱
创作灵感
查看更多
会员
登录
注册
确定删除此收藏集吗
删除后此收藏集将被移除
取消
确定删除
确定删除此文章吗
删除后此文章将被从当前收藏集中移除
取消
确定删除
编辑收藏集
名称:
描述:
0
/100
公开
当其他人关注此收藏集后不可再更改为隐私
隐私
仅自己可见此收藏集
取消
确定
底层
订阅
FranzWang
更多收藏集
微信扫码分享
微信
新浪微博
QQ
28篇文章 · 0订阅
iOS Category 底层实现原理(二):函数分析与加载流程
category 的加载涉及到 runtime 的初始化及加载流程且内容实在过于多,这里只是粗略的介绍下,关于 runtime 加载流程的详细内容准备开新篇来讲。本篇只研究 runtime 初始化加载过程中涉及的 category 的加载。Objective-C 的运行是依赖 …
iOS 开发:『Runtime』详解(一)基础知识
本文用来介绍 iOS 开发中 『Runtime』的基础知识。通过本文您将了解到:1. 什么是 Runtime? 2. 消息机制的基本原理 3. Runtime 中的概念解析 4. Runtime 消息
手把手带你探索Category底层原理
Category在iOS开发中使用非常的频繁,特别是在为系统类进行拓展的时候,我们可以不用继承系统类,直接给系统类添加方法,最大程度的体现了Objective-C的动态语言特性。 本文篇幅较长,但内容完整,建议能跟随文章内容探索一遍,毕竟实践出真知。 将类的实现分散到多个不同的…
如何安全的使用KVO
关于KVO的原理,已经有许多文章来叙述,然而说原理的文章很多,可是就是没有找到一篇KVO实际使用时的。 本文旨在描述了KVO在实际使用中遇到的种种问题。 KVO是Objective-C对观察者模式的一种实现,指定一个被观察对象,当对象的某个属性发生更改时,观察者会获得通知的一种…
iOS汇编教程(五)Objc Block 的内存布局和汇编表示
在 Objc 中,Block 是一个特殊的对象,它的实例并非是常规的对象结构,而是以 Block_layout 结构体的形式存在。在声明时,Block 的结构体会以值类型的形式直接存储在栈上,随后会被 copy 到堆上,成为一个特殊的对象,学习 Block 的底层原理一方面能够…
iOS开发——方法动态决议和消息转发机制
1. 动态方法决议 在经过_class_resolveMethod方法后,在进行一次retry,重新进行一遍方法的查找流程,而只有一次动态方法解析的机会就是在_class_resolveMethod方法中。 由此:我们可以在+(BOOL)resolveInstanceMetho…
对iOS中runloop使用场景的一次总结
这里大部分是从各个技术博客中参考而来,部分场景添加了一些实践代码。 使用CFRunLoopPerformBlock函数, 可以指定在runloopMode下执行block任务。不过一般不这样使用。 autoreleasepool是以栈为节点, 双向链表构建的一个数据结构。aut…
iOS 底层探索 - 应用加载
App 从被用户在主屏幕上点击之后就开启了它的生命周期,那么在这之中,究竟发生了什么呢?让我们从 App 启动开始探索。在探索之前,我们需要熟悉一些前导知识点。 如上图箭头所示,App加载流程 就是我们 App 的二进制主文件。 对于接触 iOS 开发比较早的同学,可能知道我们…
基于 Mach-O 符号重排减少缺页中断次数来提升 iOS App 启动速度的可行性分析
最近字节跳动技术团队放出了一篇文章:抖音研发实践:基于二进制文件重排的解决方案 APP启动速度提升超15%,提到通过重排 Mach-O中的二进制,减少启动流程中的缺页中断次数,为 App 节约了 200ms 左右的启动时间(根据抖音目前的启动速度估算),本着严谨的态度,本文将对…
iOS 开发 — 类的加载
在前几篇文章中我们研究了对象、类和方法,这次我们就来研究一下在开发中非常重要的类究竟是如何加载的。 我们从_objc_init函数开始看起,其实在这之前还包括dyld对动态库的加载、链接等一系列操作,然后才会来到_objc_init函数,这个过程我们日后再另出文章研究。 1. …