首页
首页
沸点
课程
直播
活动
竞赛
商城
APP
插件
搜索历史
清空
创作者中心
写文章
发沸点
写笔记
写代码
草稿箱
创作灵感
查看更多
会员
登录
注册
iOS进阶之路
Akironer
创建于2021-06-15
订阅专栏
iOS进阶
等 6 人订阅
共18篇文章
创建于2021-06-15
订阅专栏
默认顺序
默认顺序
最早发布
最新发布
Akironer
1年前
前端
面试
iOS进阶之路(十八)总结
1.对象的本质 alloc、init、new的区别 alloc: init init底层没有做什么操作,直接返回了obj。这样做是一种抽象工厂设计模式,让代码实现更加自由;我们可以在子类中重写init
126
点赞
评论
Akironer
3年前
iOS
iOS进阶之路 (十七)多线程 - 锁的底层原理和使用
现在操作系统基本都是多任务操作系统,即同时有大量可调度实体在运行。在多任务操作系统中,同时运行的多个任务可能: 多个任务之间有依赖关系,某个任务的运行依赖于另一个任务。 同步:是指散步在不同任务之间的若干程序片段,它们的运行必须严格按照规定的某种先后次序。最基本的场景就是:多个…
2686
12
4
Akironer
3年前
iOS
iOS进阶之路 (十六)多线程 - GCD
GCD(Grand Central Dispatch) 是基于C语言的API,是苹果公司为多核的并行运算提出的解决方案。GCD会自动利用更多的CPU内核(比如双核、四核)。程序员只需要将任务添加到队列中,并且指定执行任务的函数,不需要别写任何线程管理的代码。 学习 GCD 之前…
1674
10
1
Akironer
3年前
iOS
iOS进阶之路 (十五)多线程 - 基础
本篇主要涉及多线程的基础知识,内容相对简单,为接下来的GCD、锁做好铺垫。 一. 进程 & 线程 & 任务 进程是指在系统中正在运行的一个应用程序。 补充:iOS系统是相对封闭的系统,App在各自的沙盒(sandbox)中运行,每个App都只能读取iPhone上系统为该应用程序…
2247
11
2
Akironer
3年前
iOS
iOS进阶之路 (十四)KVO 原理 & 缺陷
想要理解KVO,必须先理解KVC,因为键值观察是建立在键值编码 的基础上。观众老爷们可以参考笔者的上篇文章iOS进阶之路 (十三)KVC。 一. KVO的定义 KVO (Key-value observing) 是一个非正式协议,允许对象在其他对象的指定属性发生更改时得到通知。…
3103
7
评论
Akironer
3年前
iOS
iOS进阶之路 (十三)KVC
KVC(键值编码)由 NSKeyValueCoding非正式协议启用的一种机制,采用该协议可以间接访问对象的属性。当一个对象与键值编码兼容时,它的属性可以通过一个简洁、统一的消息传递接口通过字符串参数寻址。这种间接访问机制补充了实例变量及其相关访问器方法提供的直接访问。 二. …
2162
4
评论
Akironer
3年前
iOS
iOS进阶之路 (十二)类拓展 & 关联对象
一. 类拓展 类扩展在编译期和头文件里的@interface以及实现文件里的@implement一起形成一个完整的类,extension伴随类的产生而产生,亦随之一起消亡。 根据官方文档,类拓展是编译时与类同时加载的。 我们知道,类加载时数据很早的时候都会来到_read_ima…
747
1
评论
Akironer
3年前
iOS
iOS进阶之路 (十一)分类的加载
上篇文章讲到,实现了+ load方法的类是非懒加载类,否则就是懒加载类。 非懒加载类:+ load方法是在main函数之前被调用的。这个时候为了能后保证+ load方法能被调用,就必须提前把这个类加载好。 非懒加载类加载流程: _dyld_objc_notify_registe…
1585
8
1
Akironer
3年前
iOS
iOS进阶之路 (十)runtime 相关面试题
一. 什么是runtime runtime 是由C 和C++ 汇编 实现的一套API,为OC语言加入了面向对象,运行时的功能。 runtime是指将数据类型的确定由编译时推迟到了运行时。例如 extension - category 的区别: extension可以添加实例变量…
839
1
评论
Akironer
3年前
iOS
iOS进阶之路 (九)类的加载
上篇文章,我们学习了app加载时dyld的过程。dyld从start开始,递归初始化dyld_system、dyld_dispatch、dyld_obj完成动态库的链接;最后进入obj_init。 一. _objc_init 读取影响运行的环境变量。如果需要,还可以打印环境变量…
555
2
评论
Akironer
3年前
iOS
iOS进阶之路 (八)dyld加载流程
1. 编译过程 链接(Linking):将源文件中用到的库函数与汇编生成的目标文件.o合并生成可执行文件。链接器将不同的目标文件链接起来,因为不同的目标文件之间可能有相互引用的变量或调用的函数,如我们经常调用Foundation框架和UIKit 框架中的方法和变量,但是这些框架…
1604
8
1
Akironer
3年前
iOS
iOS进阶之路 (七)消息转发
上篇文章我们介绍到,OC方法底层通过objc_msgSend进行消息发送。 1. 动态方法决议 在父类AKPerson定义一个实例方法和一个类方法,都不实现。然后用子类AKStudent调用这两个方法。cmd + b 运行,程序崩溃'unrecognized selector …
626
4
评论
Akironer
3年前
iOS
iOS进阶之路 (六)消息的本质 & 消息发送
1. 方法的本质 AKPerson是AKStudent的父类,两个类各有一个类方法和实例方法。 由此可知:方法的本质其实就是通过objc_msgSend(id,SEL) 向特定的对象发送特定的消息。id是消息接受者,SEL是方法编号。 在clang编译之后还是run(),而不是…
480
5
评论
Akironer
3年前
iOS
iOS进阶之路 (五)cache_t 方法缓存
上篇文章中,我们探索了Class的结构,并学习了其内部的成员了isa,superClass以及bits的作用,还剩下一个cache_t cache没有进行详细的介绍,我们只能基本知道,其内部存放的只是一个key和imp的键值对,本文就系统的学习cache_t。 1. cache…
511
3
评论
Akironer
3年前
iOS
iOS进阶之路 (四)类的原理
前面几篇文章中,我们学习了对象的创建、内存布局、isa的结构和走位,知道了对象通过isa关联到类。本文就开始学习类的原理。 1. 类的本质 阅读cpp文件发现:Class真正类型是objc_class。 从objc_class结构体,我们可以看出objc_class主要由sup…
511
3
评论
Akironer
3年前
iOS
iOS进阶之路 (三)OC对象的原理 - isa 结构 & 走位
学习之前,我们先补充下位域和联合体的知识。 1. 位域 所谓位域就是把一个字节中的二进位划分为几个不同的区域,并说明每个区域的位数。每个域有一个域名,允许在程序中按域名进行操作——这样就可以把几个不同的对象用一个字节的二进制位域来表示。位域是C语言一种数据结构。 有些信息在存储…
1527
6
评论
Akironer
3年前
iOS
iOS进阶之路 (二)OC对象的原理 - malloc & 内存对齐
在alloc底层上文中讲了OC对象创建的流程,本文开始学习OC对象在内存中的布局。 1. 代码调试 代码准备,开始调试。 sizeof:sizeof是操作符,不是函数,它的作用对象是数据类型,主要作用于编译时。因此,它作用于变量时,也是对其类型进行操作。得到的结果是该数据类型占…
1937
4
评论
Akironer
3年前
iOS
iOS进阶之路 (一)OC对象的原理 - alloc
alloc是iOS中创建对象、开辟内存的方法,本文就学习下alloc在底层做了什么. 1. alloc 代码准备,开始调试。 内部调用了bits.canAllocFast默认为false。 至此,已经完成了初始化isa并开辟内存空间,那我们来看看instanceSize如何获取…
628
6
评论