首页
AI Coding
NEW
沸点
课程
直播
活动
AI刷题
APP
插件
搜索历史
清空
创作者中心
写文章
发沸点
写笔记
写代码
草稿箱
创作灵感
查看更多
会员
登录
注册
Akironer
掘友等级
获得徽章 0
动态
文章
专栏
沸点
收藏集
关注
作品
赞
15
文章 10
沸点 5
赞
15
返回
|
搜索文章
最新
热门
iOS进阶之路 (十三)KVC
KVC(键值编码)由 NSKeyValueCoding非正式协议启用的一种机制,采用该协议可以间接访问对象的属性。当一个对象与键值编码兼容时,它的属性可以通过一个简洁、统一的消息传递接口通过字符串参数寻址。这种间接访问机制补充了实例变量及其相关访问器方法提供的直接访问。 二. …
iOS进阶之路 (十二)类拓展 & 关联对象
一. 类拓展 类扩展在编译期和头文件里的@interface以及实现文件里的@implement一起形成一个完整的类,extension伴随类的产生而产生,亦随之一起消亡。 根据官方文档,类拓展是编译时与类同时加载的。 我们知道,类加载时数据很早的时候都会来到_read_ima…
iOS进阶之路 (十一)分类的加载
上篇文章讲到,实现了+ load方法的类是非懒加载类,否则就是懒加载类。 非懒加载类:+ load方法是在main函数之前被调用的。这个时候为了能后保证+ load方法能被调用,就必须提前把这个类加载好。 非懒加载类加载流程: _dyld_objc_notify_registe…
iOS进阶之路 (十)runtime 相关面试题
一. 什么是runtime runtime 是由C 和C++ 汇编 实现的一套API,为OC语言加入了面向对象,运行时的功能。 runtime是指将数据类型的确定由编译时推迟到了运行时。例如 extension - category 的区别: extension可以添加实例变量…
iOS进阶之路 (九)类的加载
上篇文章,我们学习了app加载时dyld的过程。dyld从start开始,递归初始化dyld_system、dyld_dispatch、dyld_obj完成动态库的链接;最后进入obj_init。 一. _objc_init 读取影响运行的环境变量。如果需要,还可以打印环境变量…
iOS进阶之路 (八)dyld加载流程
1. 编译过程 链接(Linking):将源文件中用到的库函数与汇编生成的目标文件.o合并生成可执行文件。链接器将不同的目标文件链接起来,因为不同的目标文件之间可能有相互引用的变量或调用的函数,如我们经常调用Foundation框架和UIKit 框架中的方法和变量,但是这些框架…
iOS进阶之路 (七)消息转发
上篇文章我们介绍到,OC方法底层通过objc_msgSend进行消息发送。 1. 动态方法决议 在父类AKPerson定义一个实例方法和一个类方法,都不实现。然后用子类AKStudent调用这两个方法。cmd + b 运行,程序崩溃'unrecognized selector …
iOS进阶之路 (六)消息的本质 & 消息发送
1. 方法的本质 AKPerson是AKStudent的父类,两个类各有一个类方法和实例方法。 由此可知:方法的本质其实就是通过objc_msgSend(id,SEL) 向特定的对象发送特定的消息。id是消息接受者,SEL是方法编号。 在clang编译之后还是run(),而不是…
iOS进阶之路 (五)cache_t 方法缓存
上篇文章中,我们探索了Class的结构,并学习了其内部的成员了isa,superClass以及bits的作用,还剩下一个cache_t cache没有进行详细的介绍,我们只能基本知道,其内部存放的只是一个key和imp的键值对,本文就系统的学习cache_t。 1. cache…
iOS进阶之路 (四)类的原理
前面几篇文章中,我们学习了对象的创建、内存布局、isa的结构和走位,知道了对象通过isa关联到类。本文就开始学习类的原理。 1. 类的本质 阅读cpp文件发现:Class真正类型是objc_class。 从objc_class结构体,我们可以看出objc_class主要由sup…
下一页
个人成就
文章被点赞
142
文章被阅读
45,795
掘力值
1,278
关注了
17
关注者
441
收藏集
9
关注标签
4
加入于
2016-11-30