自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(547)
  • 资源 (5)
  • 收藏
  • 关注

转载 iOS单个应用程序的最大可用内存

设备:(单个APP最大值/设备内存总量/总量百分比)iphone - ios app maximum memory budget - Stack Overflow

2024-04-03 12:19:09 37

原创 iOS 文件分割保存加密

删除重复部分后,继续拼接 ,即可得到原始文件。demo只是验证想法,没有做很多异常处理。

2024-01-27 13:51:12 827 1

原创 iOS 包含行间距计算富文本size

需求上是文字固定宽度,最多显示3行,超过3行尾部打点展示。在一次开发过程中,发现带有行间距的富文本计算高度,会有不准确的情况,富文本内容明明很长,但是计算出的高度只有不到20像素,导致整个cell的高度计算异常。测试后发现,系统的5个枚举中,只有 byWordWrapping和byCharWrapping 计算准确,带有截断方式的case,计算都是错误的。这时候算出来的size高度只有17像素,真实显示到屏幕上Label的高度是58像素。好吧,系统这个样子,我们也没有办法,最后采用的方式。

2024-01-27 12:06:25 1100

原创 树结构实战,获取文件夹大小

而我们需要分析磁盘的占用空间,无法避免需要读取,但是期望只通过一次文件IO操作,来获取到所有某个目录下所有文件夹的信息。所以需要一种方式可以仅进行一轮磁盘操作,就能获取到对应目录下的所有信息。

2024-01-20 23:28:09 418

转载 Codable 的用法和原理

Codable 也可以代表苹果为 Swift 开发的一套编解码系统,从 Swift 4 开始引入,包含了 Encoder 和 Decoder 协议和他们的两个实现 JSONEncoder、JSONDecoder 和 PropertyListEncoder、PropertyListDecoder。其中 Codable 及其相关协议放在了标准库中,而具体的 Encoder、Decoder 类放在了 Foundation 框架中。

2024-01-01 17:01:26 147

转载 swift动态成员查找 @dynamicMemberLookup

通过调用people.info.job可以访问Info的属性值。但是,如果你想直接通过people.job 而不是people.info.job 调用它怎么办?这只是一个用于讲解动态成员查找的简单案例,但在实际开发中,在特定场合可以发挥作用,正常的场景我们最好不要这么做。如果类、结构体有对应的属性, 会优先查找属性, 属性查找不到 才会到dynamicMemberLookup 流程。既然是动态查找,如果两个属性类型不同,怎么办?和泛型的逻辑类似,通过类型推断来选择对应的方法。

2023-12-18 13:25:35 120

原创 iOS使用CoreText完成txt阅读器

CoreText是一个高效处理字符和字形转换和进行文字排版的框架。通过学习使用coretext,计算分页并渲染,找出最核心逻辑,做了一个只展示核心原理的最简demo。

2023-12-10 18:03:49 1082

转载 iOS 富文本属性

常见的富文本key不是那么好找,所以直接封装成一个方法。调用方法比去找对应的键还是要方便一些:对NSMutableAttributedString的分类进行方法扩展。因富文本属性这些对应的。

2023-12-09 19:04:40 221

原创 leetcode 41. 缺失的第一个正数

给你一个未排序的整数数组nums,请你找出其中没有出现的最小的正整数。请你实现时间复杂度为O(n)并且只使用常数级别额外空间的解决方案。

2023-11-26 16:42:04 586

原创 Swift 常用类别整理

比如视图宽度 = 数量 * 单个元素宽度 + 元素之间间距, 数量一般为Int, 而元素宽度,元素之间间距一般为CGFloat,生成最终宽度一般为CGFloat,计算过程中涉及到类型强制转换。如果担心重载的影响范围太大,可以将重载运算符的声明范围定在 internal 或者 不写,这样也不用担心影响到三方库或者系统库的调用,影响范围已知且可控。按照正常的开发习惯,可以在Swift中通过重载常见的运算符,支持Int和CGFloat之间的互相运算,比如下面的写法。

2023-11-12 13:14:34 323

转载 iOS 使用Masonry出现约束警告定位视图

在使用Masonry时候,有时候虽然界面显示正常,但是log里面会出现如下类似的警告。链接:https://www.jianshu.com/p/838b012f12a0。可以显示出控件的名字,一目了然就可以看到有问题的控件约束,修改即可。MASAttachKeys(控件XX), 可以传多个控件。2. 初始化控件XX 下面 添加 代码。1.通过断点找到有问题的控件XX。3.run,看log。

2023-11-08 14:31:37 287

原创 三门问题-Swift测试

当参赛者选定了一扇门,但未去开启它的时候,节目主持人开启剩下两扇门的其中一扇,露出其中一只山羊。参赛者会看见三扇关闭了的门,其中一扇的后面有一辆汽车,选中后面有车的那扇门可赢得该汽车,另外两扇门后面则各藏有一只山羊。第一次选的空门(概率2/3),之后主持人开另一个空门,换门,得到汽车。第一次选的汽车(概率1/3),之后主持人开一个空门,换门,失败。参赛者挑山羊一号(1/3),主持人挑山羊二号。参赛者挑山羊二号(1/3),主持人挑山羊一号。参赛者挑汽车(1/3),主持人挑羊一号。

2023-09-24 12:17:30 415

转载 iOS 适配SceneDelegate的坑: scheme 和 Universal Link 在调试时的踩坑记录

在你使用SceneDelegate的时候不管你是scheme还是Universal Link 都会在冷启动的时候不走代理函数。解决办法有两种:1.你可以不用SceneDelegate这个文件。这样就可以避免问题的出现。毕竟现在的APP好像并没有强制开发者只用SceneDelegate;2.在无数次的测试的时候我们会发现在APP冷启动的时候都会走SceneDelegate的我们可以对这个函数做做文章。在中有两个属性,一个是另一个是。

2023-09-16 19:24:59 510

转载 iOS Universal Link起源

说起 Universal Link(通用链接),对于有过 iOS 开发的同学,一定有用上过。目前在申请微信分享或登陆时,需要配置 Universal Link 链接。苹果 WWDC 2015 提出的 iOS 9 的新功能。方便地通过打开一个 https 链接来直接启动 App (手机有安装 App 的情况下)。实现 web-app 的无缝链接时,能够提供极佳的用户体验。但是,反过来说,为什么需要 Universal Link?最后,我们从产品的角度来总结一下URL Scheme和的功能发展。

2023-09-16 18:00:55 138

原创 iOS系统暗黑模式

先看下系统的暗黑模式是怎么适配的。

2023-09-10 17:34:52 1468

转载 MVC的一个常见的误用

APP的各种架构,其实所想要解决的问题本质在于,是把 “用户操作,数据变更,UI反馈”, 这部分代码分成不同的职责类,每个类负责一部分工作。分多少类,每个类的职责有何差异,就是不同框架的区别。根据数据驱动,数据流动的方式就产生了不同的框架,MVC,MVVM,VIPER等。如何避免把 Model View Controller 写成 Massive View Controller 已经是老生常谈的问题了。

2023-08-13 14:40:26 63

转载 YYCache思路

很早之前看过YYCache,对于内存缓存一开始是没看懂的,但是后面学过了LRU算法之后,加上自己的实际实践之后,内存缓存已经完全明了。对于磁盘缓存,确实虽然多次看了源码,但是一致不明所以,直到自己使用SQLLite实现磁盘缓存的功能,回头在看YYCache的思路,才恍然大悟。以下是YYCache的思路,其实是对原文的精简。YYCache (通常一个缓存是由内存缓存和磁盘缓存组成,内存缓存提供容量小但高速的存取功能,磁盘缓存提供大容量但低速的持久化存储。

2023-08-13 10:24:18 122

原创 OSLog与NSLog对比

意识大概是说,NSLog会向ASL写log,同时向Terminal写log,而且同时会出现在Console.app中(Mac自带软件,用NSLog打出的log在其中全部可见);因此,为了线程安全,每次调用NSLog时,它都会打开一个新的asl客户端连接,发送消息,然后关闭连接。因此,为了线程安全,每次调用NSLog时,它都会打开一个新的asl客户端连接,发送消息,然后关闭连接。意思就是ASL是个系统级别的log工具,syslog的替代版,提供了一系列强大的log功能。而asl就是对应应用层的用NSLog。

2023-08-05 17:17:31 1264

转载 iOS Universal Link 简介

(通用链接)是什么?这是Apple在iOS9推出的一种能通过HTTPS链接直接启动手机APP(手机有安装APP的情况)的链接。当你的应用支持(通用链接),在用户点击一个链接时可以跳转到你的网站并获得无缝重定向到对应的APP,且不需要通过Safari浏览器。如果你的应用不支持的话,则会在Safari中打开该链接。说起,我们不由就会想起URL Scheme,以为在出来之前iOS这边使用的一直都是URL Scheme进行APP之间的跳转,当然在Safari中也可以通过scheme://跳转APP。

2023-07-16 17:38:01 553

转载 Xcode 执行 pod lib lint 报错:building for iOS Simulator, not found for architecture arm64

之前打包机升级 Xcode12 之后发现私有库发版时执行命令报错,一开始看报错信息提示以为是 Xcode12 或者 CocoaPods 的锅,想着蹲个新版本出来也许就好了,就暂时没管,打包机仍旧使用 Xcode11 发版。后来因为另外的需求需要我们升级 Xcode12,要优先解决组件发版报错问题,所以就仔细排查了下这个问题。

2023-06-18 23:41:48 2080

转载 Swift属性包装器@propertyWrapper

属性包装器,用来修饰属性,它可以抽取关于属性重复的逻辑来达到简化代码的目的。比如:如果你有属性提供了线程安全检查或将数据存到数据库功能,那么你将需要为每个属性编写类似代码。有了属性包装器,我们就可以避免类似重复代码。个人理解:属性包装器是对 set、get方法的封装,不同的属性有相似的set、get,使用属性包装器可以简化相似的代码。

2023-06-06 10:48:59 958

原创 setContentHuggingPriority和setContentCompressionResistancePriority的使用

如果想让左边的内容拉伸,就设置左边的数值250);如果想让右边的内容拉伸,就设置右边的数值250)。如果想让左边的内容收缩,就设置左边的数值750);如果想让右边的内容收缩,就设置右边的数值750)。setContentHuggingPriority(拉伸),这个值越低,就会在宽度多余的情况下,被拉伸。举例:一个labelA的抗压缩系数为500,labelB为750,那么空间不足的情况下,LabelA会打点显示。

2023-05-21 11:14:19 1616

转载 Swift 错误处理Error,throws,rethrows

语句可以有多个,def的执行顺序与定义顺序相反,最后定义的def最先被执行。函数本身不会抛出错误,但是调用闭包参数抛出错误,那么它会将错误向上抛出。,所以需要优化代码,保证运行时不会报错。因为目前还是没人来处理这个错误,可以使用。上面的函数运行时候报错,因为除数不能为。下一句直到作用域结束的代码都将停止运行。等)离开代码块前必须要执行的代码。语句将延迟至当前作用域结束之前执行。用来定义任何方式(抛错误、的函数,这样就不用去处理。下面代码中a、b是等价的。

2023-05-04 16:09:00 247

原创 iOS判断模拟器的宏

这个宏通常用于基于当前运行环境的条件编译,以便在模拟器和真机设备之间执行不同的代码。例如,如果你有一些与硬件相关的代码(如使用摄像头或传感器),而这些硬件只能在真机设备上使用,那么你可以使用。宏只能在 iOS 应用程序的源代码中使用,并且只有在编译应用程序时才会定义。否则,如果该宏未被定义或其值为零,则表示应用程序当前正在真机设备上运行。宏来编写与硬件无关的模拟代码,以便在模拟器上运行,并在真机设备上编写实际的硬件驱动代码。是一个预定义的宏,用于在编译 iOS 应用程序时检测当前是否正在模拟器上运行。

2023-05-03 12:08:18 607

转载 Swift 数组常用高阶函数

会遍历数组的每个元素,遍历到一个元素,会调用一次闭包生成一个新的值,最终所有的值组成一个新的数组返回。会遍历数组的每个元素,如果元素满足一定的条件,就进行筛选过滤,最终筛选结果生成一个新的数组返回。的区别是它会将内部的元素都拆开统一生成一个大的数组返回。会遍历数组的每个元素,每遍历到一次,就调用一次闭包。的值,第二个参数是数组遍历到的每个元素。模拟系统内部的实现方式,大概是这样的。一样,最终都是生成一个新的数组返回,但是。,同时在真正返回结果的时候,会自动过滤掉。,就相当于数组每遍历一次,就将上一次的。

2023-04-29 22:56:42 315

原创 iOS APP灰色模式

2.添加 self.layer.compositingFilter = @"saturationBlendMode";只是单个vc,比如首页,加到vc对应的self.view上即可。1.创建一个继承UIView的view,然后关闭该View的点击事件。整个导航栏栈都需要,可以加到nav.view上。整个APP都需要,可以加到window上;3.在需求灰色的页面添加此视图,仅适用于iOS12以上版本。

2023-03-29 15:08:49 356

转载 Swift 中的 async/await

async-await 是在 WWDC 2021 期间的 Swift 5.5 中的结构化并发变化的一部分。Swift中的并发性意味着允许多段代码同时运行。这是一个非常简化的描述,但它应该让你知道 Swift 中的并发性对你的应用程序的性能是多么重要。有了新的 async 方法和 await 语句,iOS13之后可用,我们可以定义方法来进行异步工作。你可能读过Chris Lattner的Swift并发性宣言Swift Concurrency Manifesto by Chris Lattner,这是在几年

2023-03-22 20:09:06 862

转载 iOS13 Scene适配:UIWindow窗口和导航控制器

Xcode 11创建的项目中,写入上述代码运行App,结果发现这部分代码虽然执行了,但是通过UIViewController的self.navigationController获取的导航竟然是nil。多场景窗口、SceneDelegate等只有在iOS13才可以,若要考虑iOS12及以下的运行环境,那么上述解决方案就要考虑环境版本匹配了,完整代码如下。这次iOS13的发布,其改动步子有点大了,尤其是是其多场景窗口(多任务)已经颠覆了老应用的设计基础了----数据的协同共享处理机制(本文不谈,哈哈)

2023-03-17 11:43:18 1743

转载 iOS约束冲突查找调试工具

在开发过程中,经常会在控制台看到系统输出这样的约束冲突在解完一波冲突之后,过了一段时间发现又出现了新的约束冲突,如果能在开发的过程中就发现并解决这些约束冲突,并且后续合入主分支的代码中不带有这些约束冲突,就需要想办法找到这样log的出现时机,在开发过程中添加断言,避免此类问题重复出现。功能。

2023-03-12 21:33:02 770

转载 iOS换肤方案

另外ArgBuilder是链式结构,因为一个可变的参数可能通过多次调用转化而来,比如一张原始图片,需要进行裁剪,拉伸,旋转后才得到最终的图片,那么这个图片需要执行多次ArgBuilder操作,最终才得到结果图片。资源指的是颜色、字体、图片、动画等。以Color为例,系统提供创建Color的API中参数都是确定的数字,对于数字是什么我们其实不用太关心,我们需要关心的是这个Color代表的含义,比如导航栏的颜色,那么可以将这个色值映射到导航栏颜色这个key上,这样就可进行配置,进而达到动态替换的目的。

2023-03-11 22:21:19 543

原创 工具:把Mac上某个目录下所有文件移动到一层目录下

比如说,某个文件夹下有很多文件,并且层级很深。想要把这些文件都放到同一个文件夹下。可以使用下面代码执行,一定要建立命令行项目。

2023-01-18 15:41:04 1058

转载 AFNetworking之于https认证

是服务器传过来的,里面包含了服务器的证书信息,是用来我们本地客户端去验证该证书是否合法用的,后面会更详细的去讲这个参数)然后如果有证书,则用证书认证方式,否则还是用默认的验证方式。再讲简单点,其实就是一个容器,装了服务器端需要验证的证书的基本信息、公钥等等,不仅如此,它还可以装一些评估策略,还有客户端的锚点证书,这个客户端的证书,可以用来和服务端的证书去匹配验证的。唯一需要注意的是,这个获取的证书排序,是从证书链的叶节点,到根节点的。客户端用之前生成的私钥解密服务段传过来的信息,于是获取了解密后的内容。

2023-01-07 14:15:07 569

原创 leetcode 2439. 最小化数组中的最大值

削峰填谷,整体考虑,遇到第i个时,把第i个当成最后一个,把前i-1个都当成一个数字进行处理。计算前i个数字的平均值向上取整,此时相当于把前i个的山峰削减完成,前i个的最大值就是平均值向上取整,然后继续第i+1个。

2023-01-01 23:30:30 1068

原创 ios 计算label宽度方法效率对比

ios 计算label宽度方法效率对比sizeToFit PK boundingRectWithSize

2022-12-16 21:55:10 1228

原创 LeetCode392. 判断子序列

给定字符串s和t,判断s是否为t的子序列。字符串的一个子序列是原始字符串删除一些(也可以不删除)字符而不改变剩余字符相对位置形成的新字符串。(例如,"ace"是"abcde"的一个子序列,而"aec"不是)。

2022-12-01 20:27:10 571

原创 iOS MD5基础知识

MD5信息摘要算法(英语:MD5 Message-Digest Algorithm),一种被广泛使用的密码散列函数,可以产生出一个128位(16字节)的散列值(hash value),用于确保信息传输完整一致。

2022-12-01 14:37:16 891

转载 iOS端URL编码和解码过程

URL 是Uniform Resource Locator 的缩写,统一资源定位符,对可以从互联网上得到的资源的位置和访问方法的一种简洁的表示,是互联网上标准资源的地址。互联网上的每个文件都有一个唯一的URL,它包含的信息指出文件的位置以及浏览器应该怎么处理它。基本URL包含模式(或称协议)、服务器名称(或IP地址)、路径和文件名、参数,如“协议://授权/路径查询?参数”。URL 与 URI很多人会混淆这两个名词。

2022-11-13 20:19:09 2240

原创 Swift 创建一个自己的命名空间

Swift的三方库,比如RxSwift中的rx,Kingfisher中的kf,给类别添加了一个前缀,就想写一个自己的前缀在项目中使用,可用区别工程中自己添加的独有扩展方法。

2022-11-12 19:18:55 1201

原创 LeetCode 455. 分发饼干

假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。,这个孩子会得到满足。你的目标是尽可能满足越多数量的孩子,并输出这个最大数值。虽然你有两块小饼干,由于他们的尺寸都是1,你只能让胃口值是1的孩子满足。你有三个孩子和两块小饼干,3个孩子的胃口值分别是:1,2,3。,这是能让孩子们满足胃口的饼干的最小尺寸;你有两个孩子和三块小饼干,2个孩子的胃口值分别是1,2。你拥有的饼干数量和尺寸都足以让所有孩子满足。,我们可以将这个饼干。

2022-11-06 22:08:34 338

原创 LeetCode 1189. “气球” 的最大数量

给你一个字符串text,你需要使用text中的字母来拼凑尽可能多的单词"balloon"(气球)。字符串text中的每个字母最多只能被使用一次。请你返回最多可以拼凑出多少个单词"balloon"。

2022-11-05 19:44:20 311

ios swift 直播动画demo

swift的 , 会OC的看无压力 , 直播中送礼物的动画, 写了常见的4种 , 包括 同时收到多个礼物时 , 展示位不够 的处理 , 可以到cocoaChina上找,那里不要积分

2018-07-04

NSArray越界崩溃解决方法

比较完美的解决了数组越界的问题, 在debug模式下会崩溃 , 在release不会崩溃 , 开发过程中 , 方便调试 , 正式环境中 减少崩溃.

2018-05-08

空空如也

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

TA关注的人

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