- 博客(60)
- 收藏
- 关注
原创 【iOS】JSONModel源码学习
之前了解过JSONModel的一些使用方法等,但是对于底层实现并不清楚了解,今天来学习一些JSONModel的源码流程,本篇博客进行一个记录。if (!return NO;return NO;return YES;结果:会打印错误 信息,同时也不会转化模型。
2025-08-10 16:28:56
1033
原创 【iOS】渲染原理&&离屏渲染
在上面的光栅化处理之后,我们得到了图元对应的像素,之后我们需要通过片段着色器(给每一个像素Pixel赋予正确的颜色)和测试与混合(处理片段的前后位置以及透明度)给这些像素填充正确的颜色和小锅得到位图以便最终显示在屏幕上。该阶段目的主要是得到图元,指的是图像在应用中被处理的阶段,此时还处于CPU负责的时期,在这个阶段可以会对图像进行一系列的操作或者改变,最终将新的图像信息传给下一个阶段。这是一个复合引擎,职责是尽可能快地组合屏幕上不同的可视内容,这些可视内容可被分解成独立的图层,这些图层会被存储在一个叫做。
2025-08-04 16:58:03
1237
原创 【iOS】KVO
类对象中保存着当前对象的实例方法,在向该对象发送消息的时候,实际上是发送到了派生类对象的方法。不一定触发instance实例对象的setter方法,但是该方法在修改成员变量的值的时候会调用。上述我们看了当注册观察者之后会生成一个中间类,那么当我们移除观察者之后,这里又会指回原本的类。这里要注意一点,当移除观察者之后,isa指针会指向原来的类,但是并不销毁中间类。,翻译为键值观察,这是一种机制,其允许其他对象的指定属性的更改通知给对象。,动态的修改当前实例对象的isa指针,使其指向派生类,并重写了。
2025-08-02 16:16:47
1074
1
原创 【iOS】多线程基础
本文介绍了iOS多线程编程的基础知识。主要内容包括: 进程与线程的概念区别: 进程是资源分配的最小单位,线程是程序执行的最小单位 线程共享进程资源,切换开销更小 多线程原理: 单核CPU通过快速切换线程实现"同时执行"效果 影响执行速度的因素包括CPU调度、任务复杂度等 线程的生命周期: 新建-就绪-运行-阻塞-死亡五个阶段 介绍了线程的exit和cancel方法 线程安全: 对比了互斥锁和自旋锁的特点 分析了atomic原子属性的实现原理 线程间通信方式 NSOperation的基本使
2025-06-03 13:38:49
1337
原创 【iOS】分类、扩展、关联对象
本文探讨了Objective-C中的分类、扩展和关联对象的概念及其实现机制。分类在运行时被整合到类信息中,可以添加方法但不能添加成员变量,且方法会覆盖原类中的同名方法。扩展在编译时与类一同编译,可以添加私有属性和方法,但不能用于系统类。关联对象通过runtime机制为分类添加属性,使用objc_setAssociatedObject和objc_getAssociatedObject进行属性的设置和获取。文章还详细分析了分类和扩展的底层结构及其加载流程,并提供了关联对象的源码实现解析,帮助读者深入理解这些概念
2025-05-21 20:42:09
1211
原创 【iOS】探索消息流程
runtime运行时是指在代码跑起来,被装载到内存中的一个过程;在这个时候如果出错的话,程序就会崩溃,这是一个动态阶段编译时是源代码翻译成机器能识别的代码的一个过程,这个时候主要是对语言进行最基本的检查报错,即词法分析、语法分析等,这是一个静态的阶段runtime通过OC代码,例如通过NSObject方法,例如通过Runtime API,例如其中的compiler就是我们了解的编译器,即LLVM,例如OC的alloc对应底层的objc_alloc就是底层库。OC。
2025-05-18 15:14:49
1178
原创 【iOS】类与对象底层探索
这里我们需要注意一个问题:为何图中的以及中的类信息打印的结果都是CJLPerson?0x00000001000081e8是perosn对象的isa指针地址,他&后得到的结果是创建person的类CJLPerson。而0x00000001000081c0是isa中获取的类信息所指的类的isa的指针地址,就是CJLPerson类的类的isa指针地址,在Apple中我们将其简称为元类。故而,我们可以了解到两个打印都是CJLPerson的根本原因是元类导致的。
2025-05-02 18:13:31
1588
原创 【iOS】小蓝书学习(五)
这种对象内存不可能遭到覆写,并且收到消息后会抛出异常,准确说明发送过来的消息,并描述回收之前的那个对象。开启功能后,系统会修改对象的isa指针,指向特殊的僵尸类,从而使对象变为僵尸对象,他会相应所有选择子,响应方式为:打印一条包含信息内容及其接收者的消息,然后终止应用程序。这样写的问题是新值和实例变量的值是一样的,只有当前对象还在用引用这个值的时候,那么设置方法中的释放操作会令值保留计数变为0,那么就会被系统回收从而产生crash,接下来retain操作则是错误的,使用ARC的时候不会存在这种流失的现象。
2025-04-17 15:03:48
731
原创 【iOS】UITableView性能优化
笔者近期刚刚结束第二个项目,了解学习学长博客以及自己搜索资料,发现有很多可以进行优化的部分,本篇博客对其性能优化进行一个总结,主要从CPU以及GPU两个方面出发,去解决性能优化的问题,以提高用户使用的流畅度。CPU:对象的创建和销毁、对象属性的调整、布局计算、文本的计算和排版、图片的格式转换和解码、图像的绘制。GPU:接收提交的纹理和顶点描述、应用变换、混合并渲染、输出到屏幕。
2025-04-16 17:33:37
1405
原创 【iOS】UIPageViewController学习
笔者最近在写项目时想实现一个翻书效果,上网学习到了今天写本篇博客总结一下关于该控制器的学习,这里笔者学习较浅,后期再进行补充。下面我给出一张图来展现。
2025-04-13 20:37:57
1213
原创 【iOS】小蓝书学习(七)
虽然不使用系统框架也可以写出OC代码,但几乎没有人这么做,即便我们经常使用的NSObecj这个标准的根类,也是属于Foundation框架,而非语言本身。
2025-03-02 19:21:03
793
1
原创 【iOS】小蓝书学习(四)
对象之间经常需要相互通信,而通信方式有很多种。OC开发者广泛使用一种名叫委托模式的编程设计模式来实现对象间的通信,该模式的主旨是:定义一套接口,某对象若想要接受另一个对象的委托,则需遵从此接口,以便成为其“委托对象”。而这“另一个对象”则可以给其委托对象回传一些信息,也可以在发生相关事件时通知委托对象。类中经常容易填满各种方法,而这些方法的代码则全部堆在一个巨大的实现文件中。在这个情况下,可以通过OC的“分类”机制,把类代码按逻辑划入几个分区中,这对开发与调试都有好处。下面通过个人信息这个类举例说明:如果
2025-02-26 15:01:22
1123
原创 【iOS】小蓝书学习(二)
所以在我们使用的时候,尽量不要直接访问实例变量,而是通过存取方法来做,虽然属性最终还是得通过实例变量来实现,但是它却提供了一种简洁的抽象机制。
2025-02-26 15:01:16
1166
原创 【iOS】小蓝书学习(三)
在我们学习使用OC构建应用程序时,经常会用到别人所写的代码,也可以将自己的代码开源出来供别人使用,这需要用到OC中常见的编程范式,也需要了解各种可能碰到的陷阱。本章的学习主要就是了解这些内容。
2025-01-23 14:36:17
1168
原创 【iOS】小蓝书第一章学习
我们要注意,在使用字面量语法时,数组中元素不能为nil,否则会抛出异常,这是由于字面量语法实际上是一种“语法糖“,本质上来说,就是先创建一个数组,再把方括号中所有对象添加到这个数组中来。当我们在编写代码时,将某一个时间提取为常量,如果使用#define来替换的话,在所有引入该头文件的文件中,都会被替换成这个时间,这样反而破坏了程序。如果后面在添加一种状态,编译器会报警告,提示新加入的状态并没有在swtich语句中处理,如果加入default分支,就不会报这个警告,,它就会处理这个分支。
2024-12-16 10:13:11
1271
1
原创 【iOS】引用计数
我们可以用一个房间内开关灯来说明引用计数这个问题,当房间内进入第一个人时开灯,最后一个人离开时关灯,在这个过程中,需要照明的人数就是引用数。方法就可以实现,令对象在超出指定的生存范围时能够自动并正确的释放掉,在我们上文中举例的array就是通过调用。除了上述方法以外的方法生成的对象,因为不是自己生成并持有,所以自己不是该对象的持有者。我们在使用alloc等方法或者retain方法将持有者变成自己时,需要在不需要时释放该对象,但是。自己持有的对象,一旦不再需要时,持有者有义务释放该对象,使用。
2024-09-19 00:54:13
1566
原创 【iOS】单例模式
在前期学习OC初期时曾经简单了解过单例模式,今天通过这篇博客总结近期学习的单例模式。单例模式是一种常见的设计模式,使用单例模式创建的类在当前的进程中只可以有一个实例,可以防止一个实例被反复创建而占用内存空间。在开发过程中有许多用到的单例,例如UIApplication,一个UIApplication对象就代表着一个应用程序,每个应用程序有且仅有一个UIApplication对象。懒汉模式饿汉模式优点懒汉模式在第一次使用时才会被创建,这样可以节约资源,通过加锁的方法可以确保多线程的安全性。
2024-09-12 23:49:15
821
原创 【iOS】MVC模式
点击view,视图响应事件,而后通过代理传递事件到Controller,发起网络请求更新model,model处理完数据,代理或通知给Controller,改变视图样式,完成操作。MVC模式全称为model(模型)view(视图)controller(控制器),他分为三个不同的层分别负责不同的职责。在这个图中,我们可以看出,Model层和View层之间并不会进行直接通信,他们之间是依靠Controller进行通信的。MVC模式降低了各个环节耦合性,优化了Controller中的代码量。
2024-09-08 14:30:18
1177
原创 【iOS】Masonry学习
Masonry是一个轻量级的布局框架。通过链式调用的方式来描述布局,是排版代码更加简洁易读。masonry支持iOS和Mac OS X。相比原生的NSLayoutConstraint,提高了使用容易度和代码的可阅读程度。
2024-08-27 15:41:32
1557
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅