![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
类库解析
文章平均质量分 91
朗清风
iOS开发工程师
展开
-
Block 签名信息的使用
Block在OC中却是一个非常神奇的存在,即具备了对象的特性(具备isa指针),又具备了方法的特性(具有自己的实现函数),这就自然而然注定了Block会与众不同.除了常规使用之外,还可以利用Block做一些"骚操作".Block签名在OC中中所有的方法都有编码信息,签名信息包含了方法的参数类型和返回值类型等信息.对于对象的实例方法可以利用 Method method =...原创 2020-04-27 16:53:13 · 825 阅读 · 0 评论 -
JSPatch 框架 (二)----JS原理
在上一篇文章中我们已经简单介绍了JSPatch的简单使用过程,可见JSPatch是一个威力无比强大神器,可以通过中间转化,让原生运行动态下发的JS代码,从而实现应用行为的动态更新,虽然现在该框架被apple封掉了,但是不影响我们通过这个框架进行技术分析,汲取营养的作用.从JS进来的第一个方法就是原生的defineClass,这篇文章我们就从这里开始窥探一下这个方法的实现.1. defineC...原创 2020-04-13 16:45:39 · 450 阅读 · 0 评论 -
对象引用计数保存在哪里?
在64bit操作系统中,apple对对象中的isa进行了优化使用isa_t结构来保存关于对象的更多信息.# if __arm64__# define ISA_MASK 0x0000000ffffffff8ULL# define ISA_MAGIC_MASK 0x000003f000000001ULL# define ISA_MAGIC_VALUE 0x000...原创 2020-03-25 18:05:24 · 1052 阅读 · 0 评论 -
对象释放时都干了些啥?
在之前的介绍isa_t时,曾经提起isa中存储了has_cxx_dtor信息,如果对象不包含该标志,释放时速度会更快一些.这说明在对象释放时并不是简单的进行对象空间的释放,应该会还有一些额外的辅助操作.使用objc4-756.2源代码进行说明.对象释放过程在对象的释放过程中会调用系统或者自定义实现的deallo函数,就从这里开始.dealloc调用了_objc_rootDeallo...原创 2020-03-25 14:54:33 · 284 阅读 · 0 评论 -
weak实现原理
在ARC模式中weak关键字常常用来处理对象之间的互相强引用导致的内存泄漏问题,主要是因为使用weak修饰变量不会导致引用计数的增加不会影响对象的生命周期,而且在对象释放之后会将自动指针置空避免也指针访问问题.那么系统是和实现weak管理的?定义weak实现文件首先在Xcode中,打开汇编调试Xcode->Debug->Debug Workflow->Always S...原创 2020-03-24 18:33:36 · 958 阅读 · 0 评论 -
tagged pointer
产生背景在项目开发中,我们总是希望能够节约空间,减少不必要的系统开销,或者提升效率,缩短执行时间,当然有时候也会通过增加空间开销来换取执行时间的缩减。可以为了方便CPU寻址提升存取效率,多数情况下内存地址会进行对齐处理,对象地址会是指针的整数倍,所以在小数据存储上,会有很多空间并没有存储数据但是却不得不空出来.指针大小与CPU位数有关,在32位CPU上占据4个字节,在64位CPU上占据8个字节...原创 2019-06-11 15:27:06 · 970 阅读 · 0 评论 -
分类添加属性------原理篇
为分类添加属性是开发中很常见的操作,以objc4-756.2为例,看看这个操作时如何实现的.AssociationsManager所有的关联对象都由通过全局的map进行管理,这个对象就是AssociationsManager.//通过自旋锁来确保操作安全spinlock_t AssociationsManagerLock;class AssociationsManager {...原创 2019-12-25 11:31:53 · 495 阅读 · 0 评论 -
fishhook------源码解读
在 fishhook------原理分析中,验证了fishhook符号重绑定的实现原理,这里主要分析一下fishhook的代码实现.准备理论知识Mach-O的文件布局Mach-O文件一共有三个部分:Header:header包含了文件的基本信息,实际上不会映射到虚拟内存空间上去; Load Commands:这部分确定了文件数据在虚拟内存上的布局,包含各个部分的映射...原创 2019-10-29 10:17:52 · 481 阅读 · 0 评论 -
fishhook------原理分析
在iOS开发中经常会使用的Hook技术,由于OC本身是动态语言,可以通过运行时方法来动态交换方法的实现,添加统一的自定义操作,例如知名的实现框架是Aspects就是利用这一原理进行实现的.另外一种常用的技术就是通过修改符号表来重定向外部链接函数的实现,利用这一原理,也有一个非常著名的轻量级框架fishhook.准备mach O文件mach O文件是apple开发专属于mac\iOS的可...原创 2019-10-25 10:20:41 · 526 阅读 · 0 评论 -
AFNetworking的图片缓存(三)
之前的文章中,我们解析了AFNetworking的图片缓存实现.今天我们来看看这些实现中探讨两个有意思的问题.3.1 避免同一链接资源短时间内重复下载在AFNetworking的图片缓存实现中,我们发现了一个很有意思的类就是AFImageDownloaderMergedTask.它通过如下操作避免了同一资源的重复请求:在发送请求时,创建了对应于请求链接URLIdentifier的me...原创 2019-08-26 17:02:25 · 319 阅读 · 0 评论 -
Aspects框架------源码分析
目录2.1 判断是否符合进行下一步交换操作的条件2.2创建AspectsContainer容器类2.3创建AspectIdentifier对象保存hook内容2.4 把AspectIdentifier根据options添加到对应的数组中2.5 进行hook操作上次聊到了Aspects的基本使用,这次我们来聊一下Aspects的基本实现原理.Aspects对外提供了...原创 2019-08-09 11:10:15 · 362 阅读 · 0 评论 -
AFNetworking的图片缓存(二)
下载实现在上篇文章中,我们对AFN的缓存策略实现做了解析,今天我们来看一下AFN如何实现下载图片.2.1AFImageDownloadReceipt跟其他的图片加载类库相似,AFN对每个请求进行了封装,使用这个类我们进行了对请求进行操作.在AFN中这个类就是AFImageDownloadReceipt,每一个发起的请求都会对应这样的对象.这个对象是有两个属性,/** The...原创 2019-08-22 16:57:52 · 427 阅读 · 0 评论 -
Aspects框架------汲取
之前我们聊过关于Aspects源代码解析,今天简单聊一聊这个类库中我们可以学习到那些实用的开发技巧.3.1如何获取block签名在apple最新的开源代码中我们可以找到关于block的定义:// Values for Block_layout->flags to describe block objectsenum { BLOCK_DEALLOCATING = ...原创 2019-08-09 14:53:04 · 252 阅读 · 0 评论 -
Aspects框架------使用
目录1.1 什么是AOP?1.2 Aspects如何使用?1.3虽然不想说,但是总有同学会问,为啥我hook类的方法就不会成功呢?难道这个著名的框架就只能hook实例方法吗?1.4 使用Aspects需要注意的问题1.1 什么是AOP?开发中总会遇到这样的需求,需要对某一个类的所有方法进行统一的操作,例如需要统计用户在每个控制器中停留的时间,大概的实现方法有但不限于...原创 2019-08-06 16:00:35 · 3895 阅读 · 1 评论 -
OC中的类与元类
注:我们引用apple开源代码中objc4-750中的相关源代码定义。OC中的对象是类的实例化出来的,这个我们都能理解。可是元类是什么,元类存在的意义是什么?首先我们来看一下OC中关于对象的实现定义,在对象结构体中居然只有一个Class类型的isa指针,那么对象的实例方法和成员变量放在哪里呢?因为只有一个isa指针,所以我们也只能从isa中去搜一下。下边我们看一下class的实现,...原创 2019-05-30 21:42:40 · 874 阅读 · 0 评论