- 博客(29)
- 收藏
- 关注
原创 如何衡量用静态库还是动态库?
Library是计算机程序使用的非易失性资源集合,包含源代码。iOS、macOS上大部分library都会包含源码,支持一种或多种架构。Library可以被静态链接,称为静态库(static library);也可以被动态链接,称为动态库(dynamic library)。静态库命名格式通常为lib*.a,动态库命名格式为*.dylib。静态库• 编译时直接链接到可执行文件,最终的 .ipa 包会包含整个库文件。• 代码和资源一起打包进 APP,不需要额外加载,运行时不依赖外部库。动态库。
2025-03-30 20:10:09
602
原创 ios App的启动过程和启动优化
app的启动主要分为两种:冷启动和热启动冷启动的意思就是app不在系统进程中,需要操作系统为其开启一个新的进程热启动指的是,App只是短暂退出,后台进程还在系统中,不需要开启新的进程。App的启动冷启动主要分为三个阶段:在main函数执行之前主要做的事情:首先ios会在内核中创建进程分配内存,然后:(1)读取加载可执行文件(2)加载动态链接库:主要包括重定基地址(Rebase指针的调整)和bind符号(3)OC运行时的初始化,包括OC相关Class的注册,category注册,selector的唯一性检查。
2025-02-17 21:20:20
516
原创 UITableView的复用原理
UITableView复用的基本原理是Cell复用机制,它通过重用已经创建的Cell来减少内存开始并提高性能,避免频繁创建和销毁Cell。
2025-02-10 00:02:40
318
转载 ios的离屏渲染
在ios中,离屏渲染(Offscreen Rendering)指的是GPU需要创建一个新的缓冲区,在屏幕外进行图像处理,然后再将结果合成到屏幕上。
2025-02-08 01:25:18
78
原创 函数方法不占额外存储空间(内存分区)?
由此我们可以得知,函数方法是存放在代码区域的,代码段是只读的,包含了程序的机器指令,多个调用者可以共享这些代码段,因此函数代码本身不会重复占用内存。(4)函数的返回函数执行完成后,栈帧被回收,栈指针(SP)向上移动,恢复到主调函数的栈帧位置,返回地址被加载到程序计数器(PC,Program Counter),程序跳回主调函数继续执行。: 全局变量和静态变量的存储是放在一起的,初始化的全局变量和静态变量存放在一块区域,未初始化的全局变量和静态变量在相邻的另一块区域,程序结束后由系统释放。• 函数的局部变量。
2024-12-04 20:17:52
399
原创 iOS中URLSeesion的使用
基本步骤写过ios网络请求的都知道,URLSession就是关于用于发送网络请求,其基本原理就是通过创建task使用task来实现请求。步骤大致如下所示:(1)创建一个URLSession对象(2)使用URLSession建立一个task实例(3)启动task实例(resume方法)
2024-12-01 22:19:39
886
原创 Swift内存访问冲突
内存的访问,发生在给变量赋值的时候,或者传递值(给函数)的时候,例如在 Swift 里,有很多修改值的行为都会持续好几行代码,在修改值的过程中进行访问是有可能发生的。读和写访问的区别很明显:一个写访问会改变存储地址,而读操作不会。存储地址是指向正在访问的东西(例如一个变量,常量或者属性)的位置的值。内存访问的时长要么是瞬时的,要么是长期的。如果一个访问不可能在其访问期间被其它代码访问,那么就是一个瞬时访问。正常来说,两个瞬时访问是不可能同时发生的。大多数内存访问都是瞬时的。
2024-11-21 15:24:00
1078
1
原创 Swift闭包的本质
闭包延迟执行在事件处理中的应用,举例:比如我要给网络发送一条请求,得到数据来更新我的UI视图,但是网络的响应时间我们是不确定的,所以就会导致更新UI的代码已经过了,但我们并没有拿到数据。我们就可以借助逃逸闭包@escaping来解决这个问题,@escaping 用于标记闭包参数,表示这个闭包可能会在函数返回后被异步调用。2 捕获值:闭包会捕获上下文使用到的变量(引用类型会保持引用关系),如果没有显式捕获列表, swift会默认按值捕获局部变量或对引用类型捕获强引用。
2024-11-19 21:32:08
546
原创 操作系统(上)
两个或多个时间同一时间间隔内发生。宏观上是同事发生的,微观上是交替发生的。(并行,指两个或多个时间同一时刻同事发生):即资源共享,是指系统中的资源可供内存中多个并发执行的进程共同使用。两种资源共享方式(同时往往是宏观上的,微观上这些进程可能是交替地对该资源进行访问的):·互斥共享:一个时间内只允许一个进程访问该资源。·同时共享:允许一个时间段内由多个进程“同时”对他们进行访问。是指把一个物理上的实体变为若干个逻辑上的对应物。物理实体是实际存在的。逻辑上对应物是用户感受到的。
2024-10-17 15:39:51
894
原创 用Swift实现验证回文字符串
0代表s中的每个元素,isLetter判断是否为字母,isNumber判断是否为数字,我们将字母和数字的都返回。最后lowercased是将所有的字母转化为小写字母。所以返回的就是一个过滤的只剩下字母和数字的字符串了。我们可以看到,题目只关注字母,所以我们要过滤掉标点符号,空格等其他元素。swift中有一个过滤器filter()我们可以利用filter来过滤掉不需要的东西,返回需要的元素。最后我们将原字符串与反转后的字符串比较就可以了,反转字符串可以通过reveresed函数,如下所示。
2024-09-24 20:14:49
449
原创 计算机网路(应用层)
客户/服务器方式(Client/Server,C/S)方式·客户/服务器是指通信中所涉及的两个应用进程。·客户/服务器方式所描述的是进程之间的服务和被服务的关系。·客户是服务请求方,服务器死服务提供方·服务器总是处于运行状态,并等待客户的服务请求。服务器具有固定端口号,运行服务器的主机也具有固定的IP地址。对等(Peer-to-Peer)方式在P2P方式中,没有固定的服务请求者和服务提供者,分布在网络边缘各端系统中的应用进程是对等的,被称为对等方。
2024-09-19 20:30:48
1128
原创 计算机网络(运输层)
物理层、数据链路层以及网络层共同解决了将主机通过异构网络互联起来所面临的问题,实现了主机与主机之间的通信。实际上在计算机网络中进行通信的真正实体事位于通信两端主机中的进程。运输层的任务就会是提供,又称端到端协议。根据应用的需求不同,因特网的运输层为应用层提供了两种不同的运输协议,即。
2024-09-18 21:48:53
1130
原创 ios调整启动图显示的时间
启动图在应用启动时由系统自动管理,显示时间的长短一般取决于应用的加载速度。这样我们就可以到达视觉上的启动时间.但是尽量不要太长时间,因为这会影响用户的体验。你可以在应用启动时通过代码引入一定的延迟来延长启动图的显示时间。方法里,加入以下代码来延迟应用启动。
2024-09-06 19:37:31
567
原创 计算机网络(数据链路层)
链路(Link)就是从一个结点到相邻结点的一条物理线路,而中间没有任何其他的交换结点。·数据链路(Data Link)是指把实现通信协议的硬件和软件加到链路上,就构成了数据链路。·数据链路层生传输的数据包称为数据链链路层以帧为单位传输和处理数据。
2024-09-03 21:04:58
1218
原创 计算机网络(物理层)
物理层为数据链路层屏蔽了各种传输媒体的差异,以便数据链路层只需要考虑如何完成本本层的协议和服务,而不必考虑网络具体的传输媒体。
2024-08-28 00:16:16
854
原创 计算机网络(Day1)
应用层(解决通过应用进程的交互来实现特定网络应用的问题)运输层(解决进程间基于网络通信的问题)网络层(解决分组在多个网络上传输和路由的问题)数据链路层(解决分组在一个网络上传输的问题)物理层(解决何种信号传输比特的问题)
2024-08-25 23:06:53
411
1
原创 Mac OS 如何安装使用MySQL
绝大多数人学习使用MySQL的时候应该都是用的windows来进行操作的吧,这里讲讲如何mac中如何简单的安装使用MySQL.
2024-05-09 15:44:10
555
1
原创 在UIKit当中使用swiftUI
这是UIKit当中的代码是 SwiftUI 框架中的一个类,它允许你在 UIKit(或 AppKit)中使用 SwiftUI 视图。这个类的主要目的是在 UIKit 应用程序中嵌入 SwiftUI 视图,并且可以作为 UIKit 视图控制器的一部分来管理 SwiftUI 视图的生命周期。这样我们就能在UIKit视图控制器中呈现一个swiftUI的视图。
2024-02-01 00:37:19
858
1
原创 ARSCNDebugOptions枚举
是 ARKit 中的一个枚举,用于在 SceneKit 中启用不同的调试选项,以便在开发过程中更好地理解和调试 AR 场景。
2024-01-14 22:37:59
435
1
原创 UiViewController创建时发生了什么
时,你正在引用这个根视图。这个根视图会被自动创建,但在默认情况下,并不会在。属性,该属性表示控制器管理的根视图。属性时才会懒加载(lazy loading)创建。初始化的时候立即创建,而是在访问。对象,负责显示控制器的内容。
2023-12-05 16:27:19
105
1
原创 ios获取自动布局frame的时机
当我们在ViewDidLoad中使用自动布局设置了button的bounds属性,但是自动布局下的frame属性并没有立马更新出来,而是发生在ViewDidLayoutSubViews当中,所以当我们在ViewDidLoad设置gradinent的frame时,获取到的button的bounds属性只是最初初始化的值,button的位置此时并没有改变,这样就理所当然的达不到我们想要的效果了。当视图控制器的视图发生变化,需要重新布局其子视图时,例如设备方向变化、状态栏的变化等。
2023-11-07 20:37:36
374
原创 ios开发过程中CAGradientLayer渐变层的使用
这样我们就设置了,渐变的起点为0到80%,即red到brown的渐变发生在0到80%,brown到blue的渐变发生在80%到100%。终止点(1,0),x=1表示x方向位于1的位置,就是屏幕的最右侧,y=0表示在y轴方向上位于最上面,所以渐变的终止点就是右上角。然后创建一个CATextayer,和UILabel类似,但它是一种图层类型,我们可以设置他的图层位置,文本内容等。起始点为(0,1),x=0表示x方向上位于0的位置,y=1表示在y方向上位于底部,即渐变的起始点为最左下角。
2023-10-12 21:52:00
986
原创 ios开发float和CGFloat的区别
以确保你的应用在不同的iOS设备上具有一致的表现。如果你编写的代码需要与C/C++代码交互,或者不涉及对精度要求非常高的任务,那么使用。总之,如果你在iOS开发中需要处理图形、界面布局或其他需要高精度计算的任务,通常建议使用。
2023-10-12 19:25:24
564
原创 ios开发过程中NSMutableAttributedString的使用
addAttribute主要用于接受单个文本的属性的值,它接受三个值,第一个为属性的键名(名称),第二个value参数接收属性的值,例如文本颜色,字体下划线,等等,第三个参数为属性包括的范围。.addAttribute主要用于接受多个文本的属性的值,它只接收两个参数,第一个参数为一个字典,里面包含多个属性—值,第二个参数为文本的范围。NSNSMutableAttributedString的富文本设置有两种方法,例如UILabel,直接将其文本属性设置为富文本。
2023-10-11 21:12:25
539
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人