首页
首页
沸点
课程
直播
活动
竞赛
商城
APP
插件
搜索历史
清空
创作者中心
写文章
发沸点
写笔记
写代码
草稿箱
创作灵感
查看更多
会员
登录
注册
iOS
samstring
创建于2021-05-10
订阅专栏
iOS知识
等 6 人订阅
共13篇文章
创建于2021-05-10
订阅专栏
默认顺序
默认顺序
最早发布
最新发布
samstring
1年前
iOS
CocoaPods
是时候理解Xcode工程与CocoaPods了
从补充网上的二进制重排方案开始,探讨Xcode工程目录和CocoaPods,理解CocoaPods到底为我们做了什么。
681
5
评论
samstring
1年前
iOS
理解iOS app的编译,运行过程
前言 一年都没怎么写iOS的文章。最近有一些知识学习了完以后总觉得零零散散的,打算以这一篇文章作为开篇,系统地记录一些所学习的iOS知识。 本篇文章的基础框架已经初步确定了,不会提及到特别深入的知识点
2380
36
4
samstring
2年前
iOS
objc库源码分析(3)-方法调用-消息转发
由于forward_imp的实现不开源,也涉及到反汇编,存在知识盲区,这篇文章主要是参考别人的博客,原作者博客,如下objc_msgForwad执行流程如下结合上一篇文章,方法调用的执行流程如下
349
点赞
评论
samstring
2年前
iOS
objc库源码分析(2)-方法调用-消息发送
前面说过了,我们在写代码时候的会调用objc_msgSend系列的方法,然后再调用lookUpImpOrForward()方法,其实这只是一个笼统的说法。 这些方法的定义在message.h文件中可以找到。这些方法的功能其实都是去寻找对象的方法,并去执行相应的方法。 其中obj…
681
点赞
评论
samstring
2年前
iOS
objc库源码分析(2)-初始化
发送消息是通过objc_megSend()系列的方法,然后会调用 objc-runtime-new.mm 文件里面的lookUpImpOrForward()方法,这个方法会检测类是否是已经初始化过的状态(initialized),如果没有类没有初始化,则去初始类。 这里的作用是…
152
点赞
评论
samstring
2年前
iOS
objc库源码分析(1)-加载
其中包含了一些列的初始化,以及image的映射和image的加载。 简而言之,fix up就是为了找到调整指针的指向,找到我们所需要的内容。 判断是否是动态库的内容,如果不是动态库。则遍历这个可执行文件里的类。 _getObjc2NonlazyClassList返回的是imag…
190
点赞
2
samstring
2年前
iOS
iOS-runtime
Runtime是一个运行时库,它提供对Objective-C语言的动态属性的支持。Runtime是一种程序在运行时候的机制,其中最主要的是消息机制。在objective-c中,消息是在程序运行的时候才绑定到方法实现的。 Class其实就是一个继承于objc_object结构体o…
519
点赞
评论
samstring
2年前
iOS
iOS中的AOP(2)-SFAspect的实现原理
调用objc_msgSend()时会传入接受对象target和方法名称sel以及参数。在objc_msgSend函数回去查找方法缓存,看类的缓存是否存在方法sel对应的方法实现IMP。如果找不到,就会执行lookUpImpOrForward()方法去查找sel对应的IMP. 在…
1139
2
评论
samstring
2年前
iOS
iOS中的AOP(1)-介绍及应用
AOP,也就是面向切面编程,可以通过预编译方式或运行期动态代理实现在不修改源代码的情况下给程序动态统一添加功能的一种技术。 其实在服务端开发中,Spring以及Spring家族产品早已大杀四方,名扬天下。作为Spring 基石之一的AOP思想更是发光发热,在各种语言,各种平台上…
1689
1
评论
samstring
2年前
iOS
iOS组件化(四)-FBKVOController源码分析
在上一篇文章中,有用到FBKVOController去实现MVVM模式。现在来分析一下FBKVOController实现原理。 在我们平常使用KVO的时候,是直接通过对被监听添加一个监听者去实现的。但是在FBKVOController中是通过一个单例_FBKVOSharedCo…
1174
1
评论
samstring
2年前
iOS
iOS组件化(三)-添加服务层以及MVVM模式
因为模块间以URL方式调用,对象在模块间不能直接传递,只能通过以参数的形式传递,MGJRouter里面的参数可以以字典的形式存在。假设两个模块间需要传递用户信息,内容如下 在两个模块间传递,发送对象时就要把对象里面的值转化成以下内容,放到字典里面去。读取时候把字典里面的字段解析…
713
1
评论
samstring
2年前
iOS
iOS组件化(二)-MGJRouter的使用和源码分析
对于前面的文章,我提及到了组件化其实就是对项目的拆分和组合。在iOS组件化(一)-利用CocoaPods拆分项目和私有化这篇文章提及到了怎么用CocoaPods进行拆分和私有化模块,那剩下的组合该怎么去做呢?方法其实有很多,在这里我选用了蘑菇街的MGJRouter去实现。下面给…
2863
7
评论
samstring
2年前
iOS
iOS组件化-前言
随着业务的发展,IT项目的体积变得越来越大,参与开发人员也会增多。开发过程中也会容易出现很多问题,像 项目体积过大造成编译速度变慢,影响开发效率。 不同业务模块的代码互相引用。当一个模块有业务需求需要修改时候,修改过程中可能导致另外一个业务模块的功能出错 没有清晰的项目结构,可…
238
2
评论