自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(72)
  • 收藏
  • 关注

原创 力扣146 - LRU缓存

【代码】力扣146 - LRU缓存。

2025-03-07 15:23:12 538

原创 iOS--SDWebImage源码解析

两万字带你从接口解析强大的第三方库SDWebImage源码

2025-02-06 11:38:41 1227

原创 Swift深入理解闭包捕获机制

深入理解闭包的捕获机制

2025-01-10 15:08:58 820

原创 从源码分析swift GCD_DispatchGroup

源码分析DispatchGroup的底层实现

2024-12-19 10:57:00 887

原创 iOS--利用UITableViewDataSourcePrefetching实现平滑如丝的无限滚动

相信大家在网络不好的时候使用列表分页的App会获得非常不好的体验,由于网络的问题,会有明显的卡顿,就像抖音等App,那么我们是否能使用一些手段来优化这个体验呢?这里可以用到UITableView中另一个协议:UITableViewDataSourcePrefetching。从而实现平滑如斯的无限滚动。什么是UITableViewDataSourcePrefetching?Prefetching API提供了一种在需要显示数据之前预先准备数据的机制,旨在提高数据的滚动性能。

2024-10-21 17:07:25 971

原创 数据结构--二叉树随记

两万三字深究二叉树

2024-10-19 12:44:50 997

原创 iOS--NSURLSession && Alamofire流程源码解析(万字详解版)

iOS原生NSURLSession和第三方库Alamofire的深入理解

2024-10-13 17:24:03 1199

原创 iOS--理解MVC与MVVM

mvc & mvp & mvvm

2024-10-10 10:48:29 1451

原创 iOS-- Runtime

一文理解#selector()与@objc是如何实现的

2024-10-08 16:44:01 1618

原创 设计模式--swift单例模式

单例模式(Singleton Pattern)是一种设计模式,确保一个类只有一个实例,并且提供一个全局访问点。可以想象成有很多个相同的门,打开后都通往一个房间。

2024-10-08 15:57:15 654

原创 iOS--App启动过程及优化

App启动是用户对于一个app的第一印象,因此如何使用户在最短的时间打开进入app显得格外重要。启动优化因此成为了App调优至关重要的一项。只有具体了解了App的启动过程,我们才能对其进行优化。

2024-09-29 16:32:01 1465

原创 iOS--RunLoop原理

一文带你了解滚动tableview时timer阻塞的原理!

2024-09-27 15:48:00 1394

原创 一文看懂iOS多线程并发(NSThread、GCD、NSOperation&&NSOperationQueue)

一万一千字带你进入iOS多线程并发的世界!

2024-09-25 18:23:28 1525

原创 iOS--生产者-消费者模式理解(附GCD信号量代码实现)

在写demo的过程中,大家可能会碰到这样一种情况:某个模块负责产生数据,这些数据由另一个模块来负责处理(此处的模块是广义的,可以是类、函数、线程、进程等)。产生数据的模块,就形象地称为生产者;而处理数据的模块,就称为消费者。在生产者与消费者之间在加个缓冲区,我们形象的称之为仓库,生产者负责往仓库了进商品,而消费者负责从仓库里拿商品,这就构成了生产者消费者模式。

2024-09-23 10:29:16 1010

原创 近万字深入讲解iOS常见锁及线程安全

上述学习的各种常见的线程锁,都是为了更好地管理和调配线程,而在开发中我们往往不可避免地采用多线程并发,这虽然很便利但是存在的巨大的安全隐患。这段代码因为多线程并发同时修改同一个变量,导致可能的结果是测试下来可能会是打印了两个 2,这就不符合我们的预期了,明明第一个传入的是 “1”,打印结果却为 2。这种情况称为资源竞争,两个线程可能同时操作user对象,实际上,除了结果不符合预期外,还可能出现一个经典的崩溃,这是因为让两个线程尝试同时操作同一个内存地址导致的。

2024-09-22 22:13:59 1534

原创 HTTP和HTTPS的区别

HTTP 和 HTTPS 的主要区别在于安全性,HTTPS 通过加密技术保护数据传输。涉及的核心概念包括签名证书、SSL/TLS 协议、对称加密和非对称加密。

2024-09-18 22:02:44 1644 1

原创 HTTP常见状态码 && HTTP的逐步发展(通俗易懂版)

就像你去了一家老店,服务员告诉你这家店已经搬到新地址了,而且以后都在新地址营业。就像你请求了服务,但服务员只是点了点头,没有给你任何东西。比如你已经缓存了这个网页,服务器告诉你“别重复下载了,之前那个版本没变”。即使你登录了,服务器还是不让你看某些内容,类似于一个禁区,你就是不能进去。就像你去餐馆点餐,结果服务员告诉你他们今天太忙了,暂时无法提供服务。就像你点了一份餐,服务员端上了餐,并且一切都正常。就像你去了一家店点餐,结果服务员说这个餐品已经下架了,不在菜单上。:客户端错误(你的请求有问题)。

2024-09-18 21:00:43 1474

原创 iOS六大设计原则&&设计模式

一个类或者模块只负责完成一个职责或者功能。类似于:UIView 和 CALayer。

2024-09-18 20:48:10 1922

原创 深度剖析iOS渲染

这样一来又只能另外申请一块内存,把本体内容都先画好。至于优化的话,有以下几种解决方法:1.缓存已经处理好的结果,然后在复用的时候再拿出来用,得用shouldRasterize, 但是这个会导致至少一次离屏渲染,不过相对于有许多layer都各离屏渲染一次,这样处理就优化很多了。如果你的layer本来并不复杂,也没有圆角阴影等等,打开这个开关反而会增加一次不必要的离屏渲染2.贝塞尔曲线优化推荐大佬文章。

2024-09-12 19:36:10 1957 1

原创 iOS的传递链与响应链机制

总的来说,就是触摸了就生成一个事件,然后事件从父视图传递给子视图(寻找合适的响应视图),在这期间是用hitest方法去递归查找并且配合了point inside函数查看是否响应在了视图的边界范围内,当找到最适合的响应视图后,才会触发类似于touchesBegan之类的事件处理方法。• 如果视图对象能够处理事件,它会响应相关的事件处理方法,如 touchesBegan(_:with:)、touchesMoved(_:with:) 或 touchesEnded(_:with:)。

2024-09-11 15:31:01 1220

原创 线程之间的通信方法

共享内存:线程可以直接访问进程的内存空间。数据共享的访问通常需要同步机制来防止出现竞争状态。 互斥锁:为了控制对共享资源的访问,保证在同一时间只有一个线程访问共享资源。 读写锁:允许多个线程同时读取一个资源,但读取时需要独占访问(效率比互斥锁高)。 条件指标:允许一个或线程在某个条件前发生多个睡眠状态,等待另一个线程在该条件上发出通知或广播。 信号量:可以用于限制对共享资源的访问,也可以用于线程间的同步。 事件(event):允许一个线程通知一个或多个等待的线程某个事件已发生。 屏障(barri

2024-09-09 19:53:36 257 1

原创 进程之间的通信方式

每个进程的用户地址空间都是独立的,一般而言是不能互相访问的,但内核空间是每个进程都共享的,所以进程之间要通信必须通过内核。

2024-09-09 19:53:16 919

原创 iOS线程(思路笔记)

线程是操作系统能够进行运算调度的基本单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,,每条线程并行执行不同的任务。和进程类似,一个线程也有三种基本转状态。

2024-05-15 20:09:42 308

原创 CSAPP 第九章---虚拟内存(通俗易懂版)

在计算机操作系统中,虚拟内存是对主存储器(DRAM)的一种抽象,其为每个进程提供了一个大的、统一的和私有的地址空间。大的:因为虚拟内存是映射关系,所以虚拟内存的最大空间就是CPU的最大寻址空间,不受内存大小的限制,能提供比内存更大的地址空间统一的:虚拟内存将物理地址映射成一个连续的地址空间,同时将每个进程的地址空间分隔开,使得每个进程都以为自己独享地址空间。同时提供了统一的内存管理机制。私有的:每个进程都有自己的虚拟地址空间,相互分隔,且进程只能访问自己的虚拟地址空间的内存。

2024-04-24 22:17:30 675

原创 CSAPP 第八章---异常控制流

举个例子:假设有A1,A2两个值,其内存位置相邻,并且分别存放着指令I1、指令I2的地址,当计算机读取A1到读取A2的这个过渡,称之为“”,这样的叫做处理器的。(上下文切换)

2024-04-15 17:55:05 819 1

原创 CSAPP 第六章---存储器层次结构

寄存器是CPU内部用来存放数据的一些小型存储区域,用来暂时存放参与运算的数据和运算结果。

2024-04-01 20:19:36 1214 1

原创 对iOS的内存存储的一些理解

最近写项目的时候遇到了一些内存上的问题(比如内存泄漏等等),通过网上的方法解决后,好奇iOS的数据是如何存储的,特记于此。

2024-03-29 19:00:28 1744

原创 浅谈iOS开发中的自动引用计数ARC

我们知道,在C语言中,创建对象时必须手动分配和释放适量的内存。然而,在 Swift 中,当不再需要类实例时,。Swift 使用 ARC 来跟踪和管理应用程序的内存,其主要是由Objective-C语言提供的。ARC是一种自动化的内存管理机制,它通过在编译时插入内存管理代码来自动管理对象的引用计数。ARC机制可以让开发者不用手动管理对象的引用计数,从而减少了内存泄漏和野指针等问题的发生。

2024-03-28 16:22:32 1468

原创 关于CoreML 和 Vision 的Confident 不同的解决方法

因为是将相机的CVPixelBuffer导入进去识别的,第一反应是CVPixelBuffer和真实的照片颜色有出入,去细究了下:当将 CVPixelBuffer 转换为真实的照片(比如 UIImage),系统会根据特定的颜色空间和配置信息对像素数据进行解释和显示。这个过程应该是一个准确的转换,不会引入颜色误差。最后将真实照片放入到CoreML中预测的时候,效果竟然出乎意料的好,才发现是CoreML 和 Vision的confident有出入,至于为什么有出入,暂时还没找到原因。

2024-03-14 10:16:21 232

原创 error while build iOS app in Xcode : Sandbox: rsync.samba (13105) deny(1) file-write-create, Flutter

解决方法:检查ENABLE_USER_SCRIPT_SANDBOXING在项目的构建设置中是否已禁用。

2023-12-21 19:43:58 552

原创 KVO(键值观察)

相比于其他语言,OC的一大特点就是动态派发,而swift为了优化性能,采用的是静态派发,所以我们需要一些操作来在swift中使用KVO。时,对象(B类)会获得通知,并作出相应处理;且不需要给被观察的对象添加任何额外代码,就能使用KVO机制。KVO(键值观察)是Objective-C 对观察者设计模式的一种实现。KVO给网络请求实时更改数据时需要进行的一系列操作带来了巨大的便利。被观察对象某个属性(A中的字符串name)发生更改。举个栗子:指定一个被观察对象(A类),当。

2023-12-14 20:43:27 244

原创 iOS线程(小白入门版)

队列一共有四种:串行队列、并行队列、系统主队列、系统全局并发队列串行队列只有一条线程,并且线程中按序执行任务并行队列中可以有很多线程,并且执行任务顺序不分先后同步任务会阻塞当前线程,并在当前线程立刻执行异步任务不会阻塞当前线程,并在与当前线程不同的线程执行如何避免线程死锁:不要在串行和主队列中执行同步任务。iOS Swift GCD 开发教程 - 掘金。

2023-11-19 22:00:55 601

原创 计算机组成原理——第一章

具体过程:当CPU想要从主存储器中查找想要的数据时,会将想要数据的存放地址放到MAR存储地址寄存器中,然后主存储器就会根据MAR中的地址,在存储体中找到想要的具体数据,再将这个地址数据放到MDR中,然后CPU从MDR中拿走想要的数据。

2023-11-16 19:28:16 149

原创 iOS性能优化

有一个电子枪然后在很多横轴方向上 发射电子,不同横轴的电子枪根据显示器中的硬件时钟产生一系列的定时信号,以此来让电子以不同的时间发射出去 这些电子一瞬间的运动形成了一帧动画。

2023-11-15 23:05:13 218

原创 CSAPP 第三章

介绍完寄存器,我们再回到汇编代码:可以看到,汇编代码分成左右两部分,左边是。

2023-11-13 15:23:41 176

原创 关于NewPopMenu的bug解决

不用懒加载,而是每次用的时候再实例化一次,懒加载从头到尾只实例化了一次而已。

2023-11-08 22:14:30 90

原创 iOS框架概述

是一个框架的集合,里面包含了众多的子框架。每个子框架都包含了共享资源库,你可以访问其头文件、声音以及视频等资源,我们设计一款app其实就是细致化地利用各个框架中的函数和方法。其中最重要的也是最常用的是UIKit 和 Foundation,进行iOS开发后对其框架有了一定的了解,今天来系统的总结下。iOS的整体系统框架图如下图所示,iOS的系统架构主要由。iOS的框架也被称为。

2023-11-07 19:41:18 151

原创 iOS 渲染概述和离屏渲染

这样一来又只能另外申请一块内存,把本体内容都先画好。至于优化的话,具体问题具体分析吧。

2023-11-03 20:02:08 168

原创 计算机网络第六章-——应用层

首先,让我们回顾一下各层之间的关系与功能:我们可以知道,应用层是解决通过应用进程的交互来实现特定网络应用的问题,也就是对应用程序的通信提供服务。那么具体提供哪些服务呢?如下:比如说,我们在浏览器中输入网站域名(www.youkuaiyun.com),就可以访问该网站的内容,这就是推动因特网飞速发展的。其相关的应用层协议为超文本传送协议HTTP。用户在浏览器地址栏中输入的是域名,而TCP/IP体系的网际层是用IP地址来标识目的主机,,以方便用户的使用。除了和外,常见的应用还有和等。

2023-11-01 20:08:15 157

原创 计算机网络第五章——运输层

一般来说我们总是希望数据传输的更快一些但如果发送方把数据发送的过快,接收方就可能来不及接收,这就会造成数据的丢失所谓流量控制就是让发送方的发送速率不要太快,要让接收方来得及接收利用滑动窗口机制,可以很方便的在TCP连接上实现对发送方的流量控制举例:主机A与主机B建立TCP连接,A给B发送数据,B对A流量控制。总的来说就是,A是用滑动窗口机制来发送数据,B会根据自身情况通知A,然后A会调整窗口大小。这边建议还是看视频更好理解。

2023-10-24 21:50:13 353

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除