自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(156)
  • 资源 (19)
  • 收藏
  • 关注

原创 Sendable 协议-Swift 结构化并发的核心安全保障

/ 所有属性都是 let(不可变),直接遵循 Sendable// 跨 Task 传递:编译器判定安全Task {let user = User(id: 1, name: "张三", createTime: Date())Task {print(user.name) // 无数据竞争风险Sendable是编译期并发安全标记,无实际方法需实现;不可变值类型可直接遵循,可变类型需保证线程安全后遵循;核心作用:由编译器提前拦截跨线程数据竞争风险,而非运行时处理;

2026-03-15 04:01:11 266

原创 结构化并发中多网络下载任务的“完成”规则

结构化并发中,多网络下载任务的“完成”是指所有子任务实际执行完毕(成功/失败/取消),而非仅触发任务;仅提交任务,父任务会卡在for awaitwaitForAll/闭包结束节点,等待所有子任务进入终态;哪怕子任务失败/被取消,只要进入“终态”,就视为“完成”,父任务会继续执行后续逻辑;这一规则确保了结构化并发的“可管可控”,避免了非结构化并发中“任务触发后游离执行”的问题。

2026-03-14 19:14:53 216

原创 结构化并发(Structured Concurrency)

结构化并发的核心是任务生命周期与代码结构绑定,父任务管控子任务的创建、执行、取消,避免游离任务;Swift 中通过TaskGroup(多任务)、结构化Task(单任务)实现结构化并发,替代传统的 GCD 非结构化调用;核心价值:解决非结构化并发的资源泄漏、错误处理混乱问题,同时提升代码可读性和可维护性;适用场景:所有需要管理多个异步任务的场景(如批量网络请求、并行计算),是 Swift 并发模型的核心推荐范式。

2026-03-14 19:14:03 351

原创 Swift6.0为主版本小版本迭代

2024年后Swift的主版本保持为6.x,未推出7.0等新主版本,但有6.1/6.2/6.3等小版本迭代;小版本更新以“兼容优化、bug修复、性能提升”为主,无破坏性变更,开发者无需重构代码;Swift版本迭代核心逻辑:主版本做“突破性变更”,次版本做“完善和优化”,保证生态稳定。

2026-03-14 18:16:05 396

原创 Swift 版本历年更新记录(核心里程碑 + 关键特性)

Swift 版本更新节奏:早期每年 1-2 个版本,2019 年后趋于稳定(每年 1 个主版本 + 1 个小版本);核心演进方向:从“语法优化”→“ABI 稳定”→“并发模型”→“内存安全/宏系统”,逐步向“高性能、高安全、跨平台”迭代;关键节点:Swift 5.0(ABI 稳定)、Swift 5.5(并发革命)、Swift 6.0(严格并发)是三个最具里程碑意义的版本。

2026-03-14 18:13:20 560

原创 基于 async/await 的 Swift 并发模型重构

重构的核心是将嵌套的回调逻辑转为线性代码,结合try/catch统一错误处理,大幅提升可读性;替换 GCD 时,优先使用TaskTaskGroup实现结构化并发,用Actor替代手动加锁解决数据竞争;重构后需注意主线程调度(@MainActor)、兼容性和Sendable协议,保证并发安全。通过这套重构方式,异步代码的可维护性、可调试性和安全性会得到质的提升,这也是 Swift 并发模型的核心设计目标。

2026-03-14 18:09:14 456

原创 iOS26

可通过修改plist文件 UIDesignRequiresCompatibility 设置为yes,关闭毛玻璃效果。在iOS26中,系统默认开启了Liquid Glass 液态玻璃效果,UITabBar展示如上图;

2026-03-06 09:38:43 126

原创 OpenClaw二号员工

先通过PowerShell初始化WSL2并重启,再在Ubuntu终端执行一键部署脚本;配置同花顺API密钥完成行情对接,粘贴监控规则即可实现自动盯盘;用小盘价值策略回测验证效果,先模拟后实盘,控制风险。如果运行中遇到任何报错(比如插件安装失败、API对接超时),直接把报错信息发给我,我帮你快速定位解决。

2026-02-11 18:26:46 924 1

原创 vibe coding 账单

trea国际版+Gemini-3-Pro 1月份重构app花费如下:好用但有点贵啊。

2026-02-10 07:39:57 41

原创 大龙虾~~~

1、mac版安装:https://mp.weixin.qq.com/s/hvCbk09wXYMHdO8QWat8uw 2、官方skills:https://clawhub.ai/skills

2026-02-10 07:26:52 318

原创 Material 和 Cupertino

/ 核心导入,Flutter默认项目已包含 ``` #### 2. Cupertino 组件 命名风格:**所有组件均以`Cupertino`为前缀**,与Material组件明确区分(如`CupertinoNavigationBar`、`CupertinoButton`、`CupertinoCard`);- 关联关系:`MaterialApp` 包裹 `Scaffold`,`Scaffold` 中承载所有Material子组件(`AppBar`、`ElevatedButton`等)。

2026-02-01 09:11:20 615

原创 约束卡顿

卡顿优化

2026-01-22 09:11:50 287

原创 通用链接~~~

https://blog.csdn.net/weixin_43864837/article/details/134668791https://ix518.blog.csdn.net/article/details/131628155?spm=1001.2101.3001.6650.1&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EOPENSEARCH%7EPaidSort-1-131628155-blog-127691852.2

2026-01-11 15:49:14 173

原创 悬垂指针 和 野指针

悬垂指针和野指针确实容易混淆,但本质都是指向无效内存,只是产生原因不同。两种指针的共同点都是EXC_BAD_ACCESS的常见原因,但预防方法不同。悬垂指针更多涉及对象生命周期管理,野指针更多是初始化问题;悬垂指针(Dangling Pointer)和野指针(Wild Pointer)都是无效指针,但产生原因和场景不同:常见场景:对象释放后,指针未置为 使用 (OC)或 (Swift)C/C++ 中:局部变量离开作用域后多线程中一个线程释放内存,另一线程仍在访问常见场景:声明指针变量但未初

2025-12-31 09:40:07 468

原创 EXC_BAD_ACCESS 和僵尸对象

EXC_BAD_ACCESS是"病",僵尸对象是"诊断工具"。不是一回事,但僵尸对象专门用来诊断EXC_BAD_ACCESS这类内存问题。

2025-12-31 09:27:15 373

原创 内存优化-(二)-oc&swift

无论是Objective-C还是Swift,内存优化的核心思想都是相似的:减少占用、及时释放、避免泄漏。但是,由于Swift在语言层面提供了更多值类型和现代语法,我们在Swift中可以通过合理使用值类型、懒加载等来优化内存。而在Objective-C中,我们更依赖于手动管理引用计数和自动释放池。在实际开发中,我们应该根据项目使用的语言,结合工具进行 profiling,找到内存瓶颈,然后针对性地优化。Objective-C 特别注意事项。

2025-12-31 08:43:02 681

原创 使用 os_unfair_lock 替代 DispatchQueue?!

我们使用 os_unfair_lock 来替代 DispatchQueue 作为锁机制。注意,os_unfair_lock 是 iOS 10.0+ 和 macOS 10.12+ 可用的。使用 os_unfair_lock 时需要注意,它必须被存储在适当的位置(例如,作为实例变量或静态变量),并且必须确保锁被正确初始化和使用。另外,os_unfair_lock 是一个互斥锁,并且不像 DispatchQueue 那样可以用于异步任务。它只是用于同步代码的锁。

2025-12-31 08:19:15 434

原创 使用 OSSignpost 标记内存关键节点

import os= nil,log: log,} else {// 使用示例} else {return nil。

2025-12-31 08:08:49 233

原创 内存优化-(一)

准备分成几个核心部分:诊断工具、编码实践、架构设计,最后总结一些关键原则。首先想到的是要给出一个全面的框架,因为内存优化涉及多个层面。内存优化不仅仅是代码层面的技巧,更重要的是建立正确的意识和持续监控的习惯。需要强调避免过度优化,内存管理要在性能、开发效率和可维护性之间取得平衡。考虑使用值类型(Struct)替代引用类型(Class),减少引用计数开销。:内存优化不是一次性的,应在开发周期中持续监控,尤其关注。:UIImage 未解码时占用较小,解码后内存暴增。:可视化对象引用关系,快速定位循环引用。

2025-12-31 08:02:07 835

原创 charles关闭后mac无法连接网络

简单来说:Charles 为了抓包,让系统把流量都导给它;但它关闭时,这个“导流”指令没有撤销,系统还在傻傻地把数据往一个不存在的端口送,所以全部失败了。

2025-12-30 11:40:46 622

原创 ios开发逆向安全防抓包

使用SSL Pinning(证书绑定):在客户端内置服务器证书或公钥,在建立SSL/TLS连接时进行验证,防止中间人攻击。避免使用明文传输:所有网络请求使用HTTPS,并且确保正确的证书验证。使用工具对Objective-C代码进行混淆,增加逆向难度。例如,类名、方法名、属性名使用无意义的字符串替换。使用系统API检测是否被调试,如果被调试则采取相应措施(如退出应用)。检查应用是否被重签名或篡改,可以通过比较嵌入的签名或检查文件完整性来实现。对敏感字符串进行加密,防止在二进制文件中直接显示。

2025-12-29 10:25:35 871

原创 卡顿监测原理

一帧画面渲染时间超过 16.67ms → 丢帧。

2025-12-16 23:31:48 548

原创 ios卡顿监测和优化(二)

iOS应用卡顿监测与优化是一个系统性工程,可以从开发阶段和线上发布后两个维度展开。

2025-12-16 22:08:00 472

原创 和appcode有相同功能的代码检测工具推荐

AppCode 作为一款强大的 iOS/macOS 开发 IDE,其代码检测功能涵盖了等多个方面。

2025-11-14 12:48:34 524

原创 ios卡顿优化

iOS 卡顿优化的核心思路是“主线程减负、渲染优化、资源高效利用”定位问题:使用 Time Profiler、Core Animation 等工具找到卡顿的具体原因(如耗时函数、过度绘制)。针对性优化主线程阻塞:将耗时操作移至子线程。UI 渲染瓶颈:简化视图层级、减少过度绘制、优化 Autolayout。资源问题:压缩图片、使用高效格式、及时释放内存。验证效果:通过 Instruments 或第三方工具监控优化后的帧率、内存占用,确保卡顿问题解决。

2025-11-14 07:34:31 1285

原创 ios开发图片上传git时压缩 图片被真实压缩了吗 此时再下载下来 图片大小变了吗

特性Git Hooks (压缩)Git LFS (管理)图片是否被压缩?是,本地文件被压缩工具处理。否,文件以原始大小存储在 LFS 服务器。下载后文件大小?变小,下载的是压缩后的版本。不变,下载的是原始大小的版本。核心目的减小文件体积,优化仓库和 App 大小。管理大文件,避免其拖累 Git 仓库性能。适用场景App 中最终使用的图片资源(如 jpg, png)。需要保留原始版本的大文件(如设计源文件、高清素材)。对于 iOS 开发中用于 App 内展示的图片资源,

2025-11-13 22:55:41 618

原创 Git LFS

Git LFS 是管理 Git 仓库中大文件的完美解决方案。显著减小仓库体积,让克隆和拉取速度飞快。保持 Git 操作的流畅性,即使项目中包含了大量设计源文件或二进制库。清晰地分离代码和大文件,使仓库更 “干净”。强烈建议在任何有大文件的 Git 项目中都采用 Git LFS,它能为你和你的团队节省大量的时间和带宽。

2025-11-13 22:44:19 770

原创 图片上传git时压缩

使用 Git Hooks 是在提交前自动压缩图片的绝佳方式,能有效控制 Git 仓库的大小。方案一 (sips:适合个人项目或快速设置,无需额外依赖。方案二 (pngquantjpegoptim:压缩效果更好,推荐用于对体积敏感的项目。长远之计:结合Git LFS来管理所有大文件,这是处理二进制资产的最佳实践。

2025-11-13 22:42:30 782

原创 Xcode的App Thinning Size Report分析包体积

通过,你能精准定位 App 体积的主要来源(是图片过大?还是第三方库冗余?),再针对性优化,从而有效减小用户下载大小,提升下载转化率。

2025-11-13 22:36:23 979

原创 ios-AVIF

AVIF 代表了图片格式的未来发展方向,提供了无与伦比的压缩效率和丰富的功能。在 iOS 开发中,它是继 WebP 之后又一个强大的包体积优化和网络性能优化工具。根据你的项目兼容性要求,选择合适的图片格式将为用户带来更快的下载速度和更好的体验。

2025-11-13 22:20:47 898 1

原创 ios-WebP

WebP 是一种非常优秀的图片格式,在 iOS 开发中,它是减小包体积和优化网络性能的强大工具。对于 iOS 14+ 的项目:强烈建议将所有合适的图片资源转换为 WebP 格式。对于需要兼容旧版本 iOS 的项目:可以考虑使用SDWebImage等库来引入 WebP 支持,特别是对于网络图片加载场景。通过合理地使用 WebP,你可以在不牺牲用户体验的前提下,显著提升你的 App 性能。

2025-11-13 22:19:56 1113

原创 ios包体积管理方案

iOS 包体积管理是一个持续的、需要团队全员参与的过程。分析:用找到体积的 “元凶”。优化资源:压缩、清理、使用合适的格式(SVG, WebP/AVIF)。代码:清理无用代码,审慎引入第三方库。配置:正确设置,开启Bitcode。策略:利用和来减小用户的初始下载大小。监控:将体积检查自动化,并定期回顾。通过以上这些方法,你完全可以将一个几百兆的 App 优化到一个非常理想的大小。

2025-11-13 22:18:37 1038

原创 热更新相关

并发队列+同步函数: 没有开启新线程;串行执行任务手动创建的串行队列+同步函数:没有开启新线程;串行执行任务主队列+同步函数:死锁并发队列+异步函数:有开启新线程;并发执行任务;手动创建的串行队列+异步函数:有开启新线程,且只开启一条新线程;串行执行任务;主队列+异步函数:没有开启新线程,串行执行任务注意:主队列的任务只会在主线程执行;同步函数没有开启...

2024-01-18 17:03:05 452

原创 devicesupport下载靠谱资源

iOSDeviceSupport: 存放iOS镜像文件,真机调试包,供大家参考,目前收录iOS8.0~iOS16持续更新中 - Gitee.com

2024-01-02 11:13:35 659

原创 责任链vs金融登录

金融app相对普通app而言,出于安全考虑,其安全校验方式比较多,以某些银行app为例,手机号登录成功后,会增加指纹、手势、OCR人脸等验证!//0 1 2 模拟责任链中密码、手势、指纹的优先级。//沿着责任链,指派给下一个业务处理。//没有业务处理,上抛。//当前业务处理掉了,上抛结果。//各个业务在该方法当中做时机业务处理。//基类BusinessObject。//当前业务进行处理。//模拟处理逻辑优先级。//响应者的处理方法。

2023-07-26 20:35:52 1000

原创 ios with shell

iOS 自定义pod库插入shell脚本 - 简书

2023-05-08 20:24:50 212

原创 iosApplePay

4.2.1>Creating and Populating the Pass Package(创建一个包含Pass所有信息和资源文件的文件夹):Passes 的创建需要一个 pass.json 文件,这个 pass.json 文件包含 pass 的所有信息,如票据类型,logo、icon资源图片,过期时间、票据描述等信息。// 2.7 通过指定merchantCapabilities属性来指定你支持的支付处理标准,3DS支付方式是必须支持的,EMV方式是可选的,

2023-04-07 13:24:55 3922

原创 web--缓存(二)(NSURLProtocol)

NSURLProtocol是一个抽象类,我们在使用时一般使用它的子类,其作用是可以拦截网络请求,并可用重定向网络请求。这种方法还是隐藏着很多坑的,它的使用方法就不在这里赘述了,ios wkwebivew拦截js、css,图片资源:https://www.jianshu.com/p/4fc13d4d5607ios开发之---NSURLProtocol:https://www.jia...

2023-04-06 16:38:57 503

原创 App间URLScheme跳转配置

AScheme跳转到BScheme配置-iOS文档类资源-CSDN下载1、AScheme工程配置1.1》AScheme的info.plist中配置LSApplicationQueriesSchemes(即BScheme的URL Schems:AppB)1.2》AScheme的跳转代码2、BScheme工程配置2.1》BScheme配置自己的URL Type下的URL Schemes即AppB2.2》BScheme的AppDelegate中接收从AScheme跳转过来的数据..

2022-02-21 16:27:42 508 1

原创 ios解析测试包的crash

条件:用本死的jekins打的包:可在内网下载测试包的dsym文件测试同学下载的内网包出现crash:1》获取.crash文件1.1》xcode->window->Devices and Simulators ->View Device Logs->找到对应crash;1.2》如果应用已上架 通过iTunes Connect(Manage Your Applications - View Details - Crash Reports)获取用户的crash日志

2022-02-15 13:14:34 364

自适应baseViewcontroller

自适应baseVC

2025-12-16

Suan.zip

Suan

2025-12-12

桥接模式-继承-iOS

桥接模式-继承-iOS

2023-07-28

策略模式的实例代码demo

策略模式的实例代码demo

2023-07-28

桥接模式-代理-iOS

桥接模式-代理-iOS

2023-07-28

责任链VS金融登录校验

对于责任链的思考,对于金融登录校验的思考

2023-07-26

AScheme跳转到BScheme配置

AScheme跳转到BScheme配置 注:截图四张,只是从AScheme跳转到BScheme的配置;但是两个工程的代码是AScheme跳转到BScheme,并支持了从BScheme跳转到AScheme

2022-02-21

ios解析crash示例文件上传

ios解析crash示例文件上传

2022-02-15

YHELKitSDK-master.zip

ios加解密 AES:128/192/256; RSA; Base64;MD5

2022-01-18

WKWebView原生与H5交互

为防止造成混淆,这里只写WKWebView原生与H5交互关键代码

2018-10-30

UIWebView原生与H5交互

UIWebView原生与H5交互,pre;confirm;等包含三个H5页面跳转的交互demo

2018-10-30

gcd处理ios多请求常用的几种情况

//1、进某页面要发四个请求,四个请求之间无影响 //2、进某页面要发四个请求,四个请求之间无影响,等所有请求回来刷新界面 //3、进某页面要发四个请求,其中某个请求的请求参数是另一个请求结果的返回字段(请求2依赖于请求1的回调结果) //4、进某页面要发四个请求,其中某个请求的两个请求参数是另两个请求结果分别返回的两个字段(请求3依赖请求1、2的回调结果) //5、进某页面要发四个请求,请求3依赖请求2的回调结果,请求2依赖于请求1的回调结果 //6、进某页面要发100个请求

2018-10-24

yfc.zip 证书测试APNS

yfc.zip 证书测试APNS

2021-08-10

dispatch_semaphore two

ios开发GCD的dispatch_semaphore:1、常用函数及作用 2、信号量的用途:1》同步不同线程 2》当做锁来使用:3》控制同时执行的线程数:

2018-10-22

dispatch_barrier_(a)sync

异步和同步的栅栏函数都有以下特点: 1、通过dispatch_barrier_(a)sync添加的block会等待前边所有的block执行完(不包括回调)才执行。 2、在其后添加的block会在dispatch_barrier_(a)sync添加的block执行完之后(不包括回调)再执行; 不同点: 1、dispatch_barrier_sync:同步栅栏函数在原线程中执行block,不开辟新线程;在将任务插入到queue的时候,       dispatch_barrier_sync需要等待自己的任务结束之后才会继续程序,然后插入被写在它后面的任务。 2、dispatch_barrier_async:异步栅栏函数会开辟新线程执行block;ispatch_barrier_async将自己的任务插入到queue之后,不会等待自己的任务结束,它会继续把后面的任务插入到queue。

2018-10-25

h5余原生交互

1、H5调原生:1》通过代理调原生 2》block调原生方法 2、javaScriptCore版原生调H5 1》用evaluateScript方法直接调用 2》objectForKeyedSubscript + callWithArguments 方法调用

2018-10-30

dispatch_group

两种方式都是模拟任务block内为异步操作的情况,方式一先执行的dispatch_group_notify里的代码,后执行的dispatch_group_async里的任务代码,这与我们的初衷相违背。如果任务block内为同步操作时,则无论哪种方式都不会出现这种状况。这也是dispatch_group的一个坑人的地方。我们在使用dispatch_group时一般都是想异步执行任务,所以,一定要注意这个坑

2018-10-18

深拷贝与浅拷贝;copy与mutableCopy;容器类型的深拷贝;copy和strong;

1、只有NS类型调用copy方法才是浅拷贝,其他的情况全是深拷贝 2、容器类调用copy或mutableCopy能出现的深拷贝的情况下,只是容器的深拷贝,而非容器内元素的深拷贝 3、无论是声明NSString还是NSMutableString类型的属性时,我们希望此属性被赋值为NSMutableString类型的字符串后,此属性不会因这个可变类型字符串的改变而改变(这也是多数情况下的用法),那就用copy修饰属性

2018-11-06

dispatch_group包含wait包含forever时长

两种方式都是模拟任务block内为异步操作的情况,方式一先执行的dispatch_group_notify里的代码,后执行的dispatch_group_async里的任务代码,这与我们的初衷相违背。如果任务block内为同步操作时,则无论哪种方式都不会出现这种状况。这也是dispatch_group的一个坑人的地方。我们在使用dispatch_group时一般都是想异步执行任务,所以,一定要注意这个坑

2018-10-18

dispatch_group包含wait

以上两种方式都是模拟任务block内为异步操作的情况,方式一先执行的dispatch_group_notify里的代码,后执行的dispatch_group_async里的任务代码,这与我们的初衷相违背。如果任务block内为同步操作时,则无论哪种方式都不会出现这种状况。这也是dispatch_group的一个坑人的地方。我们在使用dispatch_group时一般都是想异步执行任务,所以,一定要注意这个坑

2018-10-18

dispatch_semaphore

//信号量用途1://两个资源,三个线程执行;设定信号量值为2,先执行两个线程,等执行完一个,才会继续执行下一个,保证同一时间执行的线程不超过两个,保证线程的最大并发数 //信号量用途2://创建信号量的时候当锁使,保证wait和signal之间只有一个线程能进去 //信号量用途3:同步不同线程的操作

2018-10-19

NSPredicate

NSPredicate的使用总结,OC中的谓词操作是针对于数组类型的,他就好比数据库中的查询操作,数据源就是数组,这样的好处是我们不需要编写很多代码就可以去操作数组,同时也起到过滤的作用,我们可以编写简单的谓词语句,就可以从数组中过滤出我们想要的数据

2018-08-17

respondsToSelector与instancesRespondToSelector

1、二者的作用相同:都是判断某个类是否实现了某方法(注意:是是否实现某方法,必须在.m里写了{}的方法,只在.h里声明了不算) 2、有实际意义的组合只有3种 @1   类 + instancesRespondToSelector + 实例方法 yes =  类是否实现了某实例方法 @2  类 + respondsToSelector + 类方法    yes = 类是否实现了某类方法 @3  实例 respondsToSelector 实例方法 yes  =  类是否实现了某实例方法 且@1和@3的作用相同

2018-10-31

fastLane.zip

ios单工程自动打包,简单写下我使用fastlane的过程,及遇到的问题,希望自己下次在用到fastlane的时候能迅速避坑,希望也能帮助在看文章的你

2019-11-09

cocoapodsAndFramework

把组件打包成静态framework,分别做成sdk拖拽到本地工程及将此framework进行cocoapods管理使用的异同,两种方式图片和xib的取出路径不同

2019-04-23

空空如也

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

TA关注的人

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