- 博客(14)
- 资源 (1)
- 收藏
- 关注
原创 分类与扩展
1)category的方法的添加,并不是"完全替换"(只是插到了它的前面),也就是说如果category和原来类都有methodA,那么category附加完成之后,类的方法列表里会有两个methodA。2)category的方法被放到了新方法列表的前面,而原来类的方法被放到了新方法列表的后面,这也就是我们平常所说的category的方法会“覆盖”掉原来类的同名方法,这是因为运行时在查找方法的时候是顺着方法列表的顺序查找的,它只要一找到对应名字的方法,就会停止,但是后面可能还有一样名字的方法。
2025-06-07 17:16:13
936
原创 KVC与KVO
KVO全称Key-Value-Observing,作用是对象监听另一个对象特定的属性的改变,并在改变时接收到事件,举例如下:如果person对象的name属性改变了,就会调用监听者BaseController的observeValueForKeyPath方法。
2025-06-07 16:43:48
851
原创 CADisplayLink、NSTimer、GCD定时器
IOS的常用的定时器有NSTimer、CADisplayLink、GCD定时器。其中NSTimer、CADisplayLink有以下特点:依赖RunLoop,某些方法创建时需要手动把定时器添加到RunLoop中如果是通过target:selector方式创建的,需要注意定时器会对target产生强引用。由于依赖RunLoop,如果某个RunLoop循环中有大量的耗时操作,则定时器的回掉可能不会准确的在定时间隔内触发。GCD定时器由以下特点:依赖于操作系统内核的,定时精度相对高。
2025-06-07 16:31:04
934
原创 IOS性能优化
CPU(Central Processing Unit中央处理器):对象的创建和销毁、对象属性的调整、布局计算、文本的计算和排版、图片的格式转换和解码、图像的绘制(Core Graphics)GPU(Fraphics Processing Unit图形处理器)纹理的渲染。在IOS中是双缓冲机制,有前帧缓存、后帧缓存。屏幕成像原理卡顿产生的原因。
2025-06-07 16:24:16
955
原创 IOS的“main“究竟在哪
其中libSystem_initializer调用了libdispatch_init方法,libSystem_initializer被修饰__attribute__((constructor)),在dyld的libSystem库被加载的时候(this->libSystemLoader->runInitializers(*this);打开dyld源码,虽然控制台是从start开始打印的,但是dyld4跟dyld3一样都是从__dyld_start。运行程序,根据终端打印结果,可发现程序。
2025-04-28 15:06:50
561
原创 IOS逆向-1、签名原理
IOS签名机制的作用保证安装到用户手机上的APP都是经过Apple官方允许的不管是真机调试,还是发布APP,开发者都需要经过一系列复杂的步骤生成CertificateSigningRequest.certSigningRequest文件获得ios_development.cer\ios_distribution.cer证书文件注册device、添加App ID获得*.mobileprovision文件对于真机调试,现在XCode已经自动帮开发者做了以上操作。
2024-07-23 21:51:50
478
原创 3 - LLVM环境配置
下载只需要关注其中两个文件clang和llvm分别是clang的源码和llvm的源码NinjaXcode官方推荐使用Ninja编译,因为其速度最快,笔者也亲试,整个过程只需20分钟左右即可完成。但作为一名iOS开发,还是习惯使用Xcode编译,毕竟界面看起来亲切,而且可在之后我们编写插件的或者IR Pass的时候也能或得良好的代码提示,缺点就是慢一点。笔者使用Xcode编译花了40分钟左右,这根据个人电脑配置而定,配置稍微差一点,一个小时多也是正常的。
2024-07-07 17:10:56
1114
原创 2 - LLVM 前端Frontend
词法分析生成Token : clang -fmodules -E -Xclang -dump-tokens main.m 语法分析,生成语法树(AST, Abstract Syntax Tree):clang -fmodules -fsyntax-only - Xclang -ast-dump main.m 在语法树上的基础上进行检查。 官方语法文档https://llvm.org/docs/LangRef.html
2024-07-07 15:01:22
297
原创 1 - LLVM简介
相比较之下,GCC的前端和后端没分得太开,前端后端耦合在了一起,所以GCC为了支持一门新的语言,或者为了支持一个新的目标平台,旧变得特别困难。
2024-07-05 19:53:01
934
原创 4-autoreleasepool原理
在IOS程序中main.m文件,是整个IOS应用的入口,@autoreleasepool{}这个block包裹了整个应用,对象创建时自动执行autorelease将对象加入到autoreleasepool,进而管理整个IOS应用的内存回收,不用在创建对象的最后再手动release。那么下面从源码的角度来分析autoreleasepool究竟是怎样工作的。
2024-03-26 22:20:04
1844
原创 3-weak原理
weak是一种防止循环引用,也能在对象回收时自动置为nil的引用,下面从源码角度来分析weak的实现原理。slock 自旋锁,用于上锁/解锁 SideTable。refcnts 参考第三节weak_table 存储对象弱引用指针的hash表。
2024-03-26 22:03:08
1346
原创 2-内存管理
retainCount是由isa中extra_rc和Sidetable一起组成对象的retainCount归零时,还要再减一的时候,会调用dealloc方法回收对象extra_rc = 0是代表retainCount为1。
2024-03-26 21:44:21
639
原创 1-IOS内存结构
本文先从源码角度分析了runtime中的object,以及内存结构。然后从RetainCount方面介绍了如何进行管理内存,以及用autoreleasepool自动管理内存的原理,又分析了weak在内存管理的作用和原理。
2024-03-26 21:27:10
1277
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人