- 博客(50)
- 收藏
- 关注
原创 【iOS】类与对象底层探索
这里我们需要注意一个问题:为何图中的以及中的类信息打印的结果都是CJLPerson?0x00000001000081e8是perosn对象的isa指针地址,他&后得到的结果是创建person的类CJLPerson。而0x00000001000081c0是isa中获取的类信息所指的类的isa的指针地址,就是CJLPerson类的类的isa指针地址,在Apple中我们将其简称为元类。故而,我们可以了解到两个打印都是CJLPerson的根本原因是元类导致的。
2025-05-02 18:13:31
1399
原创 【iOS】小蓝书学习(五)
这种对象内存不可能遭到覆写,并且收到消息后会抛出异常,准确说明发送过来的消息,并描述回收之前的那个对象。开启功能后,系统会修改对象的isa指针,指向特殊的僵尸类,从而使对象变为僵尸对象,他会相应所有选择子,响应方式为:打印一条包含信息内容及其接收者的消息,然后终止应用程序。这样写的问题是新值和实例变量的值是一样的,只有当前对象还在用引用这个值的时候,那么设置方法中的释放操作会令值保留计数变为0,那么就会被系统回收从而产生crash,接下来retain操作则是错误的,使用ARC的时候不会存在这种流失的现象。
2025-04-17 15:03:48
588
原创 【iOS】UITableView性能优化
笔者近期刚刚结束第二个项目,了解学习学长博客以及自己搜索资料,发现有很多可以进行优化的部分,本篇博客对其性能优化进行一个总结,主要从CPU以及GPU两个方面出发,去解决性能优化的问题,以提高用户使用的流畅度。CPU:对象的创建和销毁、对象属性的调整、布局计算、文本的计算和排版、图片的格式转换和解码、图像的绘制。GPU:接收提交的纹理和顶点描述、应用变换、混合并渲染、输出到屏幕。
2025-04-16 17:33:37
1074
原创 【iOS】UIPageViewController学习
笔者最近在写项目时想实现一个翻书效果,上网学习到了今天写本篇博客总结一下关于该控制器的学习,这里笔者学习较浅,后期再进行补充。下面我给出一张图来展现。
2025-04-13 20:37:57
865
原创 【iOS】小蓝书学习(七)
虽然不使用系统框架也可以写出OC代码,但几乎没有人这么做,即便我们经常使用的NSObecj这个标准的根类,也是属于Foundation框架,而非语言本身。
2025-03-02 19:21:03
734
1
原创 【iOS】小蓝书学习(四)
对象之间经常需要相互通信,而通信方式有很多种。OC开发者广泛使用一种名叫委托模式的编程设计模式来实现对象间的通信,该模式的主旨是:定义一套接口,某对象若想要接受另一个对象的委托,则需遵从此接口,以便成为其“委托对象”。而这“另一个对象”则可以给其委托对象回传一些信息,也可以在发生相关事件时通知委托对象。类中经常容易填满各种方法,而这些方法的代码则全部堆在一个巨大的实现文件中。在这个情况下,可以通过OC的“分类”机制,把类代码按逻辑划入几个分区中,这对开发与调试都有好处。下面通过个人信息这个类举例说明:如果
2025-02-26 15:01:22
1072
原创 【iOS】小蓝书学习(二)
所以在我们使用的时候,尽量不要直接访问实例变量,而是通过存取方法来做,虽然属性最终还是得通过实例变量来实现,但是它却提供了一种简洁的抽象机制。
2025-02-26 15:01:16
1091
原创 【iOS】小蓝书学习(三)
在我们学习使用OC构建应用程序时,经常会用到别人所写的代码,也可以将自己的代码开源出来供别人使用,这需要用到OC中常见的编程范式,也需要了解各种可能碰到的陷阱。本章的学习主要就是了解这些内容。
2025-01-23 14:36:17
1061
原创 【iOS】小蓝书第一章学习
我们要注意,在使用字面量语法时,数组中元素不能为nil,否则会抛出异常,这是由于字面量语法实际上是一种“语法糖“,本质上来说,就是先创建一个数组,再把方括号中所有对象添加到这个数组中来。当我们在编写代码时,将某一个时间提取为常量,如果使用#define来替换的话,在所有引入该头文件的文件中,都会被替换成这个时间,这样反而破坏了程序。如果后面在添加一种状态,编译器会报警告,提示新加入的状态并没有在swtich语句中处理,如果加入default分支,就不会报这个警告,,它就会处理这个分支。
2024-12-16 10:13:11
1147
1
原创 【iOS】引用计数
我们可以用一个房间内开关灯来说明引用计数这个问题,当房间内进入第一个人时开灯,最后一个人离开时关灯,在这个过程中,需要照明的人数就是引用数。方法就可以实现,令对象在超出指定的生存范围时能够自动并正确的释放掉,在我们上文中举例的array就是通过调用。除了上述方法以外的方法生成的对象,因为不是自己生成并持有,所以自己不是该对象的持有者。我们在使用alloc等方法或者retain方法将持有者变成自己时,需要在不需要时释放该对象,但是。自己持有的对象,一旦不再需要时,持有者有义务释放该对象,使用。
2024-09-19 00:54:13
1505
原创 【iOS】单例模式
在前期学习OC初期时曾经简单了解过单例模式,今天通过这篇博客总结近期学习的单例模式。单例模式是一种常见的设计模式,使用单例模式创建的类在当前的进程中只可以有一个实例,可以防止一个实例被反复创建而占用内存空间。在开发过程中有许多用到的单例,例如UIApplication,一个UIApplication对象就代表着一个应用程序,每个应用程序有且仅有一个UIApplication对象。懒汉模式饿汉模式优点懒汉模式在第一次使用时才会被创建,这样可以节约资源,通过加锁的方法可以确保多线程的安全性。
2024-09-12 23:49:15
718
原创 【iOS】MVC模式
点击view,视图响应事件,而后通过代理传递事件到Controller,发起网络请求更新model,model处理完数据,代理或通知给Controller,改变视图样式,完成操作。MVC模式全称为model(模型)view(视图)controller(控制器),他分为三个不同的层分别负责不同的职责。在这个图中,我们可以看出,Model层和View层之间并不会进行直接通信,他们之间是依靠Controller进行通信的。MVC模式降低了各个环节耦合性,优化了Controller中的代码量。
2024-09-08 14:30:18
1129
原创 【iOS】Masonry学习
Masonry是一个轻量级的布局框架。通过链式调用的方式来描述布局,是排版代码更加简洁易读。masonry支持iOS和Mac OS X。相比原生的NSLayoutConstraint,提高了使用容易度和代码的可阅读程度。
2024-08-27 15:41:32
1432
原创 【iOS】UI学习——导航控制器、分栏控制器
分栏控制器下面的导航栏最多显示5个按钮,超过5个按钮,系统会自动将最后一个按钮替换成more,当点击more时,才可以看到其他的按钮,点开后,右上角有一个Edit按钮,点击可以看到所有的按钮,也可拖动改变前四个按钮展现的是什么视图。导航控制器负责控制导航栏(navigationBar),导航栏上的按钮叫UINavigationItem(导航元素项)。分栏控制器在同一界面最多显示5个控制器切换按钮,超过5个时会自动创建一个新的导航控制器来管理其余的控制器。:分栏控制器选中的控制器对象。:分栏控制器管理数组。
2024-06-03 20:57:32
1407
1
原创 【OC】深浅拷贝
浅拷贝:指创建一个新对象,但新对象仍然引用原对象的内部数据。这种拷贝方式对于性能和内存管理很有优势,但需要注意一些潜在的风险。深拷贝:指创建一个新对象,并将原对象的所有属性和子对象都复制到新对象中,形成一个完全独立的拷贝。下面借助之前看到的两张图片来帮助理解深拷贝浅拷贝。
2024-05-27 10:13:36
863
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人