# 老司机 iOS 周报 #299 | 2024-07-29

![ios-weekly](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/weekly-header/299.jpg?raw=true)
老司机 iOS 周报，只为你呈现有价值的信息。

你也可以为这个项目出一份力，如果发现有价值的信息、文章、工具等可以到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 里提给我们，我们会尽快处理。记得写上推荐的理由哦。有建议和意见也欢迎到 [Issues](https://github.com/SwiftOldDriver/iOS-Weekly/issues) 提出。

## WWDC24 内参

### 🌟 [WWDC24 10146 - 为自定义容器视图添加更多的能力](https://xiaozhuanlan.com/topic/9032587461)

[@whf881211](https://github.com/whf881211)：该文章介绍了 SwiftUI 新添加的一些用于操控 Subview 的 API。这些 API 令 SwfitUI 的操控 UI 的能力大大增强，让我们可以给自定义容器添加更多灵活性和更强大的能力。

### 🌟 [WWDC24 10198 运行、暂停、检查：探索如何使用 LLDB 进行有效调试](https://xiaozhuanlan.com/topic/0854921673)

[@haochen08](https://github.com/haochen08)：本文以 WWDC24-10198 为主线，综合了 WWDC19-24 期间多个和调试主题相关的 Session，向大家介绍如何使用 Xcode IDE 和 LLDB 的最新能力，进行有效和高效的调试。同时还介绍了如何处理使用相关工具碰到的常见问题和一些高级技巧。

## 文章

### 🐎 [SwiftUI Hero Animations with NavigationTransition](https://peterfriese.dev/blog/2024/hero-animation/)

[@xiaofei86](https://github.com/xiaofei86)：借助 iOS 18 中 SwiftUI 新引入的 NavigationTransition 协议实现和 App Store 首页卡片展开类似的 Hero 动画只需三行代码。阅读本文，跟着作者一步步复现一模一样的效果，并了解相关的 SwiftUI 新特性。

### 🐕 [Memory consumption when loading UIImage from disk](https://www.avanderlee.com/swiftui/memory-consumption-loading-uiimage-from-disk/)

[@含笑饮砒霜](https://weibo.com/chinafishnews/)：这篇文章主要讨论了在使用 SwiftUI 从磁盘加载 UIImage 时遇到的内存消耗问题，并提供了多种解决方案来优化内存使用。通过下面这些要点，读者可以全面了解文章讨论的内存消耗问题、原因、解决方案以及优化建议：
- 1.内存消耗问题
	- 问题描述：当使用 UIImage 从磁盘加载大量图片时，内存消耗会迅速增加，特别是当图片频繁切换或数量较多时
	- 示例场景：文章通过一个包含 200 张壁纸的示例项目，展示了使用 SwiftUI Slider 滑动查看图片时内存消耗增加的问题
- 2.内存增长原因
	- 系统缓存机制：使用 UIImage(named:)方法加载图片时，图片会被系统缓存，导致内存占用增加
	- 代码实现：展示了使用 UIImage(named:)方法的代码示例，并解释了为什么这种方法会导致内存问题
- 3.解决方案
	- 避免系统缓存：推荐使用 UIImage(contentsOfFile:)方法加载图片，该方法不会将图片添加到系统缓存中，从而减少内存消耗
	- 代码优化：通过重写图片加载逻辑，使用 UIImage(contentsOfFile:)替代 UIImage(named:)，解决了内存快速增长的问题
- 4.图像缓存策略
	- NSCache 使用：对于需要处理或频繁访问的图片，可以使用 NSCache 进行缓存，以提高性能和减少内存浪费
	- 缓存逻辑：展示了如何使用 NSCache 创建一个简单的图像缓存，并在需要时从缓存中检索或存储处理后的图像
- 5.性能优化建议
	- 预处理图像：建议在后台线程预先处理图像（如缩放），以避免在主线程上进行耗时操作，提高应用性能
	- 预加载策略：可以提前加载即将显示的图片，以减少滑动时的加载延迟

### 🐎 [Exploring SwiftUI: Make SF Symbols Wiggle Wiggle](https://www.rudrank.com/exploring-swiftui-make-sf-symbols-wiggle/)

[@Smallfly](https://github.com/iostalks)：这篇文章主要介绍了如何在 SwiftUI 中使用 SF Symbols 的新型摆动（wiggle）动画效果。

### 🐎 [Using SwiftUI in Command Line Tools](https://swifttoolkit.dev/posts/swiftui-meets-command-line)

[@Damien](https://github.com/ZengyiMa)：文章介绍了一种创新的方法，使用 SwiftUI 框架在命令行工具中为 iOS 应用图标添加徽章。通过 ImageRenderer 类，SwiftUI 视图可以被导出成图像。文章提供了一个名为 badgeify 的示例工具，它接受命令行参数来指定图标的输入输出路径和徽章文本。badgeify 工具利用 SwiftUI 构建视图，并利用 ImageRenderer 生成最终的带徽章图标图像。尽管在命令行环境中使用 SwiftUI 存在一些限制，比如 Xcode 无法为 SPM 可执行文件生成预览，但文章也提供了一些技巧来优化开发和测试流程。

## 工具

### 🐎 [Enable XcodeLLM on ChinaSKU Mac without disabling SIP](https://github.com/Kyle-Ye/XcodeLLMEligible)

[@Kyle-Ye](https://github.com/Kyle-Ye): 借助开源 eligibility_util 实现，实现在国行设备不关闭 SIP 的情况下使用 Xcode 16 Beta 的 LLM 功能

## 代码

### 🐎 🌟 [Charts](https://github.com/ChartsOrg/Charts)
[@水水](https://www.xuyanlan.com/categories/iOS/)：Charts 是一个用 Swift 编写的为 iOS 创建图表方面提供各类样式的库，其对标的是在 Android 开发人员中非常受欢迎的 MPAndroidChart 图表库。对于读者来说非常值得参考和收藏。

## 内推

重新开始更新「iOS 靠谱内推专题」，整理了最近明确在招人的岗位，供大家参考

具体信息请移步：https://www.yuque.com/iosalliance/article/bhutav 进行查看（如有招聘需求请联系 iTDriverr）

## 关注我们

我们是「老司机技术周报」，一个持续追求精品 iOS 内容的技术公众号，欢迎关注。

**关注有礼，关注【老司机技术周报】，回复「2024」，领取 2024 及往年内参**

![](https://github.com/SwiftOldDriver/iOS-Weekly/blob/master/assets/qrcode_for_wechat.jpg?raw=true)

同时也支持了 RSS 订阅：https://github.com/SwiftOldDriver/iOS-Weekly/releases.atom 。

## 说明

🚧 表示需某工具，🌟 表示编辑推荐

预计阅读时间：🐎 很快就能读完（1 - 10 mins）；🐕 中等 （10 - 20 mins）；🐢 慢（20+ mins）
