双队列(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 中止了。 …
Combine 与响应式编程
Jul 16, 2022
什么是响应式编程? 简单的理解就是:仅当事件发生以后才响应处理。 c <= a + b + c... 以上表达式中,c 是响应处理的逻辑,a, b, c 这些都是事件,当它们发生以后就会触发执行 c。 …
C++ 实现一个 AutoLayout 的 DSL
May 18, 2022
DSL 全称是 Domain-Specific Language,叫作领域专用语言。用于解决特定问题而提出的编程语言。比如 CSS 就是解决网页中布局问题而产生的 DSL。 自动布局(AutoLayout)是开发中必不可少的,但是其 API 沉长难记而且写出来的代码不直观。为了解决这些而出现了 Masonry 和 SnapKit。这两个库也属于自动布局的 DSL。 …
iOS 15 开启更快的 ProMotion 刷新率
Sep 28, 2021
iPhone 13 Pro 系列支持最高 120Hz 的动态刷新率,App 需要主动适配才能使用动态刷新率。 在 Info.plist 里加上: <key>CADisableMinimumFrameDurationOnPhone</key><true/> 参考资料 Optimizing ProMotion Refresh Rates for iPhone 13 Pro and iPad Pro
通过后缀名查询 MIME 类型
Mar 07, 2021
MIME type (现在称为“媒体类型(media type)”,但有时也是“内容类型(content type)”)是指示文件类型的字符串,与文件一起发送(例如,一个声音文件可能被标记为 audio/ogg ,一个图像文件可能是 image/png )。它与传统Windows上的文件扩展名有相同目的。 …
iOS:禁用快捷指令的通知
Feb 09, 2021
进入系统设置,打开“屏幕使用时间”: 点击“查看所有活动” 滑动到最下面的“通知”分类,找到“快捷指令”,点击进入通知设置页面
iOS Simulators
Feb 02, 2021
iOS Simulators How to install Download iOS simulator dmg Copy to ~/Library/Caches/com.apple.dt.Xcode/Downloads/ Click download button in Xcode Components Simulators iOS 14.3 Simulator iOS 14.2 Simulator iOS 14.1 Simulator iOS 14.0 Simulator iOS 13.7 Simulator iOS 13.6 Simulator iOS 13.5 Simulator iOS 13.4 Simulator iOS 13.3 Simulator iOS 13.2 Simulator iOS 13.1 Simulator iOS 13.0 Simulator iOS 12.4 Simulator …