iOS 开发中用户数据存放位置的选择
Nov 04, 2024
在 iOS 开发中,用户数据有两类: 用户本地配置、登录状态等清除后会影响功能的数据 缓存数据,比如网络图片等即使被清除了也不影响功能 对于第 1 种数据,应该保存在 Library/Application Support 目录中: …
解密 iOS 18 的 dmg.aea 文件
Oct 04, 2024
iOS 18 开始,Apple 对 ipsw 文件里面的 dmg 进行的加密处理,加密后的文件类型是 dmg.aea 有大牛已经做出来了加密工具:https://github.com/blacktop/ipsw/releases …
iOS 13 新增的创建 Key Window 的方式
Jan 30, 2023
iOS 13 开始,SceneDelegate 取代了原来 AppDelegate 里的大部分代理方法,如果 App 最低系统要求是 iOS 13,那么就不会走原来 AppDelegate 里的代理方法了。 对应地,原来在 didFinishLaunchingWithOptions 里创建 Key Window 的逻辑也需要移到 SceneDelegate 中: …
iOS 越狱后增加网络扩展的内存大小限制
Nov 17, 2022
Jetsam 是 macOS / iOS 系统中的内存监控程序,如果某个服务超出了所能使用的内存限制大小,Jetsam 就会直接把对应的服务或者 App 干掉。 网络扩展是 iOS 9 开始引入的特性,可以让开发者使用自定义的 Tunnel 进行网络通讯,直到 iOS 15 网络扩展的内存限制才从 15MB 提高到 50MB。 …
Mac 平台上常见的的包管理器的缓存位置
Oct 28, 2022
在 Mac 开发中,常用的包管理工具有三个: Cocoapods Carthage Swift Package Manager 这几个工具不仅支持本地路径,还支持远程 git 仓库连接。 随着使用时间的增加,包管理器积累的仓库代码会逐渐增多,有必要把它们的缓存位置记录下来,直接复制到其它电脑上使用,或者把缓存集中保存到一个地方,再使用符号链接重定向。 …
Objective-C 中的轻量泛型(Lightweight Generics)
Aug 14, 2022
轻量泛型(Lightweight Generics)是 Xocde 7 开始增加的特性。 同时增加的另外两个新特性:可空性(Nullability)和 __kindof。 可空性 可空性是声明传入或输出的类型是否可以是 nil 值:nullable 表示可以是 nil,nonnull 表示不会是 nil,对应 Swift 里的可选类型。 …
双队列(Two Queue)优化 LRU 缓存算法
Aug 14, 2022
LRU 是使用在图像加载库中常用的缓存算法。 简单的描述 LRU 算法: 新的资源放在队列头部 当资源被使用,就把资源移动到队列头部 当队列满的时候,首先从队列尾部淘汰 看起来没有什么问题,不常用的资源会被先淘汰。 …
weak-strong dance 的注意事项
Aug 13, 2022
在使用逃逸 Block 的时候,为了防止 self 被循环引用,一般使用以下方式: - (void)foo { __weak typeof(self) wself = self; [self auth:^(NSString *token) { typeof(self) self = wself; if (!self) { return; } }]; } 在 Block 外部定义一个 __weak 类型的 self 引用,在 Block 内部使用同名的局部 self 变量,以上的技巧就叫做 weak-strong dance 。 …
ObjC 中的黑魔法 Swizzling
Aug 07, 2022
ObjC 是动态语言,方法调用都是在运行期间通过 objc_msgSend 向对象发送消息来实现。 而且 ObjC 支持动态增加/交互方法的实现,这个技术称之为 Swizzle。 Swizzle 本质上是改变了方法映射表中的 SEL 与 Method 的对应关系。 …
如何使用代码结束 iOS 应用
Jul 26, 2022
在 iOS 中,强制退出 App 有以下几种方法: exit(0); 退出整个 App [NSThread exit]; 退出当前线程,在主线程执行可以退出 App abort() 异常中止 App,可以通过捕捉信号 SIGABRT 来进行异常处理 assert() 断言也会让 App 异常中止 因为不管使用何种方式杀掉 App,都会产生正在使用中的资源不能正常释放的问题,比如数据库写入一半 App 中止了。 …