自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(18)
  • 收藏
  • 关注

原创 iOS底层原理之类的加载原理(中)

前言在上一篇文章iOS底层原理之类的加载原理(上)中我们探索了_objc_init的流程,在_read_images里面知道了非懒加载类初始化方法realizeClassWithoutSwift,下面让我们一起来探索一下:一、realizeClassWithoutSwift自己加的这个方法是为了判断当前执行的类是否为要调试的LGPerson,如果不是,直接跳过,如果是再向下执行,static Class realizeClassWithoutSwift(Class cls, Class previo

2021-07-22 10:55:57 251

原创 iOS底层原理之类的加载原理(上)

前言在上一篇iOS底层原理之dyld应用程序加载中我们知道了dyld加载完成之后会调用libsystem,然后进入libobjc,调用objc_init,今天让我们研究一下_objc_init和之后的流程。资料objc4-818.2.tar.gz一、_objc_init这里面进行了以下操作environ_init 环境初始化tls_init 线程k的绑定static_init 全局静态c++函数的调用runtime_init runtime运行时的初始化objc::unatta

2021-07-14 17:28:55 325

原创 iOS底层原理之dyld应用程序加载

前言众所周知,main作为程序的入口,但是在它之前发生了什么?有点好奇,让我们来瞅一瞅:一、准备工作1.代码__attribute__((constructor)) void Func(){ printf("来了 : %s \n",__func__);}int main(int argc, char * argv[]) { NSString * appDelegateClassName; NSLog(@"1223333"); @autorel

2021-07-13 16:59:54 902 1

翻译 dyld简介

资料App Startup Time: Past, Present, and FutureDyld启动相关程序启动过程启动时间:main函数执行之前要做的事情启动加速?启动收尾:应用程序所需要的全部信息(比如使用什么dyld,他们在哪些偏移位置使用什么样的符号)代码签名?启动加速?1、减少代码,代码越少,启动就越快2、应该使用更少的dylib,减少嵌入的dylib,从时间的角度来看,最好使用系统库效果会更好3、应该声明较少的库和方法,减少初始化函数4、可以更多的使用Swift,Sw

2021-07-13 14:40:05 1138

原创 IOS底层原理之动态转发流程

前言在上一篇文章中,我们讲述了快速查找流程,接着向下探究一、instrumentObjcMessageSends辅助分析方法的介绍作用: 可以打印出指定区域内调用的所有的方法@interface MHPerson : NSObject{ NSString * newName; NSObject * objc;}@property(nonatomic,strong)NSString * hobby;@property(nonatomic, copy)NSString * n

2021-07-07 17:01:51 532

原创 IOS底层原理之动态方法决议

前言IOS底层原理之方法慢速查找流程 中我们对方法的慢速查找流程进行了分析,如果方法最终找不到时,会将imp赋值为forward_imp然后返回,返回后有发生了什么呢,今天来继续探索:一、找不到方法实现,底层原理代码实验上代码:@interface MHPerson1 : NSObject-(void)testFunc;@end@implementation MHPerson1@endint main(int argc, const char * argv[]) { @au

2021-07-05 16:35:12 241

原创 IOS底层原理之方法慢速查找流程

前言IOS底层原理之方法的本质 中探究了方法的快速查找流程既缓存查找,如果缓存中没有查找到,下面就会进入方法慢速查找流程。准备工作见上一篇文章思路来源新建一个项目,新建一个类 来一个日常断点,执行后 ,打开汇编调试, 打一个objc_msgSend的符号断点,结果如下向下运行执行看到了这个_objc_msgSend_uncached 如图然后给_objc_msgSend_uncached加个断点 ,继续向下运行,看到了lookUpImpOrForward同样的套路,给lookUpImp

2021-07-02 17:22:41 397

原创 iOS底层原理之方法的本质

前言在之前的OC类的探索(三) - cache_t分析中,我们分析了方法缓存的调用流程,然后经过向上的探索,发现了objc_msgSend,今天来探索一下这个。一、知识准备1.资料objc源码Runtime2.Runtime2.1 Runtime简介Runtime通常叫它运行时,还有一个大家常说的编译时,它们之间的区别是什么编译时:顾名思义正在编译的时候,啥叫编译呢?就是编译器把源代码翻译成机器能够识别的代码。编译时会进行词法分析,语法分析主要是检查代码是否符合苹果的规范,这个检查的

2021-06-30 17:33:36 293

原创 OC类的探索(三) - cache_t分析

前言在之前OC类的探索这篇文章中,我们讲到了NSObject的爸爸是objc_class,而它包含以下信息 // Class ISA; Class superclass; cache_t cache; // formerly cache pointer and vtable class_data_bits_t bits; // class_rw_t * plus custom rr/alloc flags今天,我们就来探索一下cache_t。一

2021-06-29 16:30:51 378

原创 OC类探索(二)

前言OC类的探索 对类结构进行了整体大概流程的分析。今天我们对类结构进行些补充,以及过程中出现的疑问进行说明。一.工具&资料LLVMAdvancements in the Objective-C runtimeWWDC 2020 - 类优化自己研究都是对代码产生了好奇,然后进行摸索,加上不断的总结规律,才能加以验证,但是WWDC 这个可以直接给开发者提供思路、代码讲解的地方,其重要性不言而喻,比较懒,直接上干货:Clean Memory 与 Dirty MemoryClean Mem

2021-06-25 16:28:07 151

原创 oc类的探索

前言在前面关于alloc探索的过程中,我们看到了alloc的流程,发现了类对象内存对齐的原则和isa的结构,对象的探索暂时告一段落,那么类究竟是什么样的呢,下面让我们一起瞅一瞅????。代码比较多,需较多耐性首先提出以下几个问题1.什么是类,类的继承关系是什么2.类的变量存储位置3.类的方法、方法、协议、扩展存储位置一、类的探索首先先创建一个类MHPerson@interface MHPerson : NSObject { NSString *hobby; int heigh

2021-06-23 14:32:04 162

原创 alloc初探02:isa

一、知识预习(结构体、联合体)结构体结构体是一种集合,它里面包含了多个变量或数组,它们的类型可以相同,也可以不同,每个这样的变量或数组都称为结构体的成员(Member)。结构体也是一种数据类型,它由我们自己来定义,可以包含多个其他类型的数据。像int、float、char 等是由C语言本身提供的数据类型,不能再进行分拆,我们称之为基本数据类型;而结构体可以包含多个基本类型的数据,也可以包含其他的结构体结构体变量struct stu{ char *name; //姓名 int n

2021-06-11 18:23:29 235 2

原创 类对象的内存

先来个图,做一下知识准备再来一段代码struct LGStruct1 { double a; // 8 [0 7] char b; // 1 [8] int c; // 4 (9 10 11 [12 13 14 15] short d; // 2 [16 17] 24}struct1;struct LGStruct2 { double a; // 8 [0

2021-06-10 17:08:01 162

原创 alloc初探

一、使用alloc首先创建一个demo,通过打印alloc、init生成对象的地址两次alloc可以看出每次alloc会分别开辟一块内存功能,而三次init没有开辟内存的功能,但会有三个不同的指针指向同一块内存。根据控制台输出的地址可以发现对象存在栈区 高->低指针存在堆区 低->高ps:栈区内存是高地址到低地址,堆区内存是低地址到高地址。这是为什么涅?...

2021-06-08 16:53:17 972

原创 iOS多环境配置

1.多target配置配合多Scheme1.1创建多个target 会生成多个scheme点击duplicate,创建target 这个时候会多生成一个info.plist文件,如果plist文件需要修改,不要忘记修改其他的个人习惯于将info文件放在一个文件夹内,修改的时候记得在build setting -> info.plist file重新配置target与对应info文件lu'j 1.2设置预处理宏swift -D -nameoc ...

2021-01-26 13:34:15 282

原创 架构、框架、设计模式初探

目录一. 概念1.架构(Architecture)2.框架(Framework)3.设计模式(Design pattern)二.关系1. 框架与架构关系2. 框架与设计模式关系3. 架构与设计模式关系三. 总结一. 概念1.架构(Architecture) 架构,又名软件架构,是有关软件整体结构与组件的抽象描述,用于指导大型软件系统各个方面的设计。简单的说架构就是一个蓝图,是一种设计方案,将客户的不同需求...

2021-01-11 12:04:03 165

原创 RSA算法梳理

一、概念①互质如果两个正整数,除了1以外,没有其他公因子,我们就称这两个数是互质关系(coprime)。比如,3和8没有公因子,所以它们是互质关系。这说明,不是质数也可以构成互质关系。②欧拉函数 φ请思考以下问题:任意给定正整数n,请问在小于等于n的正整数之中,有多少个与n构成互质关系?计算这个值的方式叫做欧拉函数,使用:Φ(n)表示如:计算8的欧拉函数,和8互质的 1、2、3、4、5、6、7、8φ(8) = 4欧拉函数特点一、当n是质数的时候,φ(n)=n-1。

2021-01-08 14:10:46 241

原创 Mac rvm、ruby、brew简单整理

一、rvm1.安装rvmcurl -L https://get.rvm.io | bash -s stable2.载入RVM环境source ~/.rvm/scripts/rvmsource ~/.bashrc source ~/.bash_profile3.查看当前安装的rvm版本rvm -v4.如果之前安装过 RVM 想要更新 rvm get stable二、使用rvm安装ruby1.列出已知的ruby版本  ...

2020-12-14 09:09:52 1344

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除