- 博客(186)
- 资源 (12)
- 收藏
- 关注
原创 Python版本管理工具-pyenv
Pyenv是一个Python版本管理工具。Pyenv允许用户在同一台机器上安装多个版本的Python,并能够轻松切换使用这些版本。
2024-05-02 22:43:25
625
1
原创 FVM安装的安装与使用
FVM是一款非常好用的` Flutter 版本管理工具`。FVM官网:[https://fvm.app/](https://fvm.app/)
2024-04-09 19:31:48
3491
原创 iOS开发:Mach-O入门理解
Mach-O:是的缩写,是Mac\iOS上用于存储程序、库的标准格式。属于Mach-O格式的文件类型有:可以在源码中,可以查看到Mach-O格式的详细定义(https://opensource.apple.com/tarballs/xnu/)1、MH_OBJECT2、MH_EXECUTE:可执行文件3、MH_DYLIB:动态库文件4、MH_DYLINKER:动态链接编辑器5、MH_DSYM:存储着二进制文件符号信息的文件.o文件编译生成的流程:官方描述https://developer.apple.c
2022-06-27 00:00:00
2273
原创 iOS开发:对于动态库共享缓存(dyld)的了解
苹果官方从iOS3.1开始,为了提高手机性能,就将绝大部分的系统动态库文件都打包存放到了一个缓存文件中(`dyld shared cache`)其缓存文件路径为:`/System/Library/Caches/com.apple.dyld/dyld_shared_cache_armX`**dyld**全称为:dyld shared cache,直接翻译为动态库共享缓存。...
2022-06-24 00:00:00
3895
10
原创 汇编:汇编与C派系语言混用以及对应LLDB常用指令
汇编与C/C++/Objective-C混用,分两种类型:外联汇编、内联汇编。LLDB的一些常用指令可以协助我们更好的读取分析OC反编译,看懂汇编代码。
2022-06-10 15:21:32
1323
21
原创 汇编:寄存器简单分类 - Unix派系 vs Windows派系
如eax、ebx、ecx、edx、eip、esp、ebp、esi、edi等都是32位的寄存器段寄存器有16个常用64位寄存器:寄存器的具体用途:基于x86架构的处理器所使用的汇编指令一般由2种格式Intel汇编DOS(8086处理器)、WindowsWindows派系 --> VC编译器AT&T汇编:读作“AT and T”,是 American Telephone & Telegraph 的缩写Linux、Unix、Max OS、iOS(模拟器)Unix派系 --> GCC编译器作为iOS开.
2022-06-10 15:11:16
2047
8
原创 汇编:关于函数完整流程的栈桢解析
栈桢(Stack Frame Layout):函数调用的具体流程,就是一个函数执行的环境,它包括参数、局部变量、返回地址等信息。
2022-06-09 20:50:19
907
18
原创 汇编:汇编指令分类
使用汇编语言编写一个完整的程序,步骤大致如下:这节我们来看下一个最简单的汇编代码包含哪些内容。下面是一段简单的汇编语言的代码:从上面的代码可以看出,汇编语言由两类指令组成:1、汇编指令2、伪指令............
2022-06-09 17:08:46
3333
4
原创 汇编:jmp指令
1、jmp为无条件转移,可以只修改IP,也可以同时修改CS和IP。2、jmp指令要给出两种信息: 1、转移的目的地址 2、转移的距离(段间转移、段内短转移, 段内近转移)
2022-06-09 00:00:00
14040
原创 汇编:Debug的常用命令
Debug的常用功能: R命令:查看、改变CPU寄存器的内容; D命令:查看内存中的内容; E命令:改写内存中的内容: U命令:将内存中的机器指令翻译成汇编指令: T命令:执行一条机器指令; A命令:以汇编指令的格式在内存中写入一条机器指令。 Q命令:退出debug P命令:类似于step over(“t”命令类似于step into),可用于跳过loop循环 G命令:跳过前面的代码,停留到指定的代码位置............
2022-06-09 00:00:00
16626
原创 汇编:CPU结构 - FLAG标志寄存器和相关指令
FLAG是计算机的专业术语,状态标志寄存器。1、用来存储相关指令的某些数据结果。2、用来为CPU执行相关的指令提供行为依据。3、用来控制CPU的相关工作方式。标志寄存器是按位起作用,每一位都有专门的含义。上图中有字符标记的都具有特殊含义,其他位没有使用(造成影响的大多数是运算指令(逻辑/算数))。进行标志位学习和验证前,先看一下如何在debug里看标志位。...............
2022-06-08 23:22:53
4140
1
原创 汇编:CPU结构 - 段寄存器
8086在访问内存时要由相关部件提供内存单元的段地址和偏移地址,送入地址加法器合成物理地址。是什么部件提供段地址? 段地址在8086的段寄存器中存放。 8086有4个段寄存器:CS、DS、SS、ES,当CPU需要访问内存时由这4个段寄存器提供内存单元的段地址: CS (Code Segment):代码段寄存器 DS (Data Segment):数据段寄存器 SS (Stack Segment):堆栈段寄存器 ES (Extra Segment):附加段..
2022-06-07 17:37:16
8038
12
原创 汇编:Mac系统搭建DOSBox汇编环境
Debug是一个DOS实用程序,是供程序员使用的程序调试工具,苹果的Mac系统上是没有DOS程序的,所以我们要下载一个名为DOSBOX的软件进行配置。
2022-06-06 22:33:22
4466
44
原创 算法技能树之初体验--期待会做的更好
一直觉得自己算法结构这块技能比较薄弱,想要学习一下。看到官方出台了算法技能树技能学习,突然间特别感谢官方能够想我之所想,于是就报名学习了一下。刷了几个题,初次体验了一下这个功能模块。总的来说,大方向是好的,可以正常刷题,但也发现了几个小点不太舒服的,这里记录几条几条,希望可以改进。
2022-06-02 11:43:26
962
15
原创 iOS事件传递链与响应链
当我们在手机上点击、滑动等屏幕操作进入到相应的页面,手机是如何区分相应指令并响应的呢?其中又是经历了怎样的过程呢?这里涉及到了事件响应链。文章目录1、事件链2、传递链3、响应链4、示例代码1、事件链如下图所示,用户点击屏幕时,首先UIApplication对象先收到该点击事件,再依次传递给它上面的所有子view,直到传递到最上层,即UIApplication ——> UIWindow ——> RootViewController ——> View ——> Button,即传递链
2022-05-29 16:08:24
3536
31
原创 iOS:关于APP架构设计的简单理解
App架构是软件设计的一个分支,它关心的是如何设计一个 App 的结构。我的理解结构设计分水平和垂直两个方向。垂直方向分:基础层、核心层、业务层、界面层。水平方向可以理解为对界面的的设计模式,目前比较通用的有MVC、MVP、MVVM三种,具体见下图:1、MVC - Apple版是 Cocoa app 中最为常⻅的架构,同时也是在 Cocoa 中讨论架构时所采用的基准线。1、实线部分代表编译期间的引用2、图中的虚线部分代表运行时的引用优点:View、Model可以重复利用,可以独立使用缺点
2022-05-25 00:00:00
1380
29
原创 APP性能优化
APP性能优化分:卡顿处理、耗电处理、安装包瘦身、APP启动四大方面。文章目录1、卡顿处理1.1、卡顿分析1.2、卡顿优化1、CPU 优化2、GPU 优化离屏渲染1、离屏渲染消耗性能的原因2、哪些操作会触发离屏渲染?1.3、卡顿检测2、耗电处理2.1、好点主要来源2.2、耗电优化3、安装包瘦身4、APP的启动4.1、APP启动分类4.2、APP启动时间分析4.2.1、dyld 阶段4.2.2、runtime 阶段4.2.3、main4.3、APP启动优化5、问答拓展1、卡顿处理1.1、卡顿分析APP
2022-05-24 00:08:14
3300
47
原创 APP内存管理
文章目录1、iOS程序的内存布局2、Tagged Pointer 标记指针问答拓展3、定时器3.1、NSTimer、CADisplayLink的使用注意点3.2、GCD定时器封装4、OC对象的内存管理4.1、引用计数的存储4.2、dealloc4.3、自动释放池4.3.1、autorelease 底层结构4.3.2、AutoreleasePoolPage1、链表关系2、实现原理3、触发逻辑5、问答拓展1、iOS程序的内存布局1、代码段:编译之后的代码2、数据段2.1、字符串常量:比如NSStr
2022-05-23 00:24:59
831
31
原创 Runtime系列:常见面试题【08】
讲一下 OC 的消息机制1、OC中的方法调用其实都是转成了objc_msgSend函数的调用,给receiver(方法调用者)发送了一条消息(selector方法名)。2、objc_msgSend底层有3大阶段
2022-05-22 00:03:46
322
25
原创 Runtime系列:LLVM的中间代码(IR)【07】
Objective-C在变为机器代码之前,会被LLVM编译器转换为中间代码(Intermediate Representation)可以使用以下命令行指令生成中间代码:clang -emit-llvm -S main.m常用语法简介:@ - 全局变量% - 局部变量alloca - 在当前执行的函数的堆栈帧中分配内存,当该函数返回到其调用者时,将自动释放内存i32 - 32位4字节的整数align - 对齐load - 读出store - 写入icmp - 两个整数值比较,返回布尔
2022-05-21 23:56:34
540
38
原创 Runtime系列:常用API(附示例)【06】
文章目录1、类2、成员变量3、属性4、方法1、类1、动态创建一个类(参数:父类,类名,额外的内存空间)Class objc_allocateClassPair(Class superclass, const char *name, size_t extraBytes)2、注册一个类(要在类注册之前添加成员变量)void objc_registerClassPair(Class cls) 3、销毁一个类void objc_disposeClassPair(Class cls)4、设置和获
2022-05-20 00:03:28
794
14
原创 Runtime系列:super调用函数本质、isMemberOfClass与isKindOfClass的区别、综合分析【05】
1、实例方法是类的判断: 1、isMemberOfClass:判断左边的实例对象是否等于右边的类 2、isKindOfClass:判断左边的实例对象是否属于右边的类或子类2、类方法是元类的判断: 1、正常情况下传参应该取元类对象进行判断断。 2、如果是传类对象判断,返回全部为0;除非右边入参为 [NSObject class],此时方法调用者不管是哪个类(只要是NSObject体系下的),都返回YES。
2022-05-20 00:02:08
368
8
原创 Runtime系列:消息机制【04】
OC中的方法调用的本质,都是转换为objc_msgSend函数的调用。这里所说的消息机制就是objc_msgSend的执行流程。objc_msgSend的执行流程可以分为3大阶段:1、消息发送1、首先判断消息接收者是否为nil,如果为nil则直接退出。所以存在使用 nil 调用方法,编译的时候也不会报错。2、如果消息接收者不为空,通过isa指针找到消息接收者类对象,然后去查找方法(如果类对象没有找到方法,通过superclass指针找到父类继续查询),具体流程如下图:receiver通过isa指
2022-05-19 00:05:05
279
21
原创 Runtime系列:Class的结构【03】
文章目录1、`bits`类信息1.1、`class_rw_t`结构1.2、`class_ro_t`结构1.3、`method_t`结构1、`IMP`代表函数的具体实现2、`SEL`代表方法\函数名,一般叫做选择器,底层结构跟`char *`类似3、`types`包含了函数返回值、参数编码的字符串2、`cache_t` 方法缓存列表通过isa、superclass指针指向中,我们知道了,isa、superclass的作用,接下来继续详细了探寻下Class结构其他成员变量的作用。Class的底层结构图如下图:
2022-05-19 00:03:50
497
20
原创 iOS的多线程安全隐患与线程同步方案
1、在资源共享时,一块资源可能会被多个线程共享,也就是多个线程可能会访问同一块资源,比如多个线程访问同一个对象、同一个变量、同一个文件。2、当多个线程访问同一块资源时,很容易引发数据错乱和数据安全问题。
2022-05-18 00:40:43
1572
37
原创 iOS中的多线程与GCD队列关系
文章目录1、iOS中的常见多线程方案2、GCD与队列2.1、常用函数2.2、queue队列2.3、同步、异步、并发、串行2.4、各种队列的执行效果2.5、队列组的使用3、问答拓展1、iOS中的常见多线程方案2、GCD与队列2.1、常用函数GCD中有2个用来执行任务的函数1、用同步的方式执行任务/*** @param: queue:队列* @param: block:任务*/dispatch_sync(dispatch_queue_t queue, dispatch_block_t b.
2022-05-18 00:00:00
728
20
原创 Runtime系列:isa位域详解【02】
要想学习Runtime,首先要了解它底层的一些常用数据结构,比如isa指针:1、在arm64架构之前,isa就是一个普通的指针,存储着Class、Meta-Class对象的内存地址2、从arm64架构开始,对isa进行了优化,变成了一个共用体(union)结构,还使用位域来存储更多的信息isa指针共用体(以下均已64架构分析)结构:位域说明:nonpointer:0,代表普通的指针,存储着Class、Meta-Class对象的内存地址1,代表优化过,使用位域存储更多的信息has_a
2022-05-17 00:00:11
550
2
原创 小码哥底层原理之RunLoop
1、概念:顾名思义,RunLoop是一个运行循环,保证App能够持续运行,处理各种事件,节省CPU资源,没事处理的时候就进入休眠。2、RunLoop与线程关系 1、每条线程都有唯一的一个与之对应的RunLoop对象。 2、主线程的RunLoop是默认创建好并开启的,子线程的RunLoop默认是没有的,RunLoop会在第一次获取它时创建,然后手动开启。 3、RunLoop是保存在一个全局的字典里,线程作为Key,RunLoop作为Value。 4、RunLoop会在线程结
2022-05-17 00:00:00
653
23
原创 Runtime系列:位运算在OC中的取值和赋值【01】
本片文章介绍将数据(如:Bool类型的数据)存储到二进制位中,包括实现逻辑、代码示例以及各自的优缺点分析。
2022-05-16 01:35:05
303
27
原创 使用uniapp开发微信小程序的人脸采集功能/人脸识别功能
本篇文章是借助微信小程序平台,添加人脸采集的功能,你看上面的漂亮姐姐有什么理由不去采集一下她的人脸呢。😂😂
2022-05-16 01:33:51
10034
85
原创 跟着小码哥一起学习OC语法,都在这里了
1、手把手带你去分析NSObject本质是什么2、用几个示例带你去了解OC对象是怎么分配内存的3、OC的类信息存放在哪里,看完千万别说还不知道4、OC:对象的isa指针和superclass指针分别指向哪里,你知道了吗?5、OC:跟随小码哥一起学习KVO6、OC:跟随小码哥一起学习KVC7、OC:Category的实现原理8、OC:一步步带你如何给Category对象添加成员变量block系列:9、OC:关于block的本质,你懂了吗?10、一篇就带你读懂关于block的变量捕获(ca
2022-05-15 00:07:04
652
39
原创 Clang编译OC程序的常用命令
在Objective-C开发过程中,尤其在了解某些功能的底层实现时,常用到Clang编译器的命令。这篇文章是简单了解Clang和Clang的常用指令。
2022-05-15 00:04:34
2372
50
原创 用uniapp实现微信小程序的电子签名效果
画布可以做很多事情,比如可以绘图,也可以做海报。在这里只是想拿它来的实现亲笔签名,开启不一样的亲笔签名姿势。
2022-05-11 00:01:02
10196
107
原创 你知道block循环引用怎么解决了吗?
✅作者简介:大家好我是瓜子三百克,一个非科班出身的技术程序员,还是喜欢在学习和开发中记录笔记的小白博主!📃个人主页:瓜子三百克的主页🔥系列专栏:OC语法🤟格言:作为一个程序员都应该认识到,好的代码是初级工程师都可以理解的代码, 伟大的代码是可以被学习一年计算机专业的新生所理解。💖如果觉得博主的文章还不错的话,请点赞👍+收藏⭐️+留言📝支持一下博主哦🤞在使用block的时候,最需要注意的问题便是循环引用,这节主要讲解,block是如何产生的?碰到循环引用又该怎么解决。文章目录一、循环引用的..
2022-05-10 08:00:00
809
36
(vue.js)nuxt.js:IP端口/局域网配置
2018-11-01
OKR的基本介绍
2018-10-21
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人