翻译 - 图像优化

翻译自 Optimizing Images by Jordan Morgan 有句话说:最好的照相机就是在你身边的那台。 如果这句俗语是对的,那么毫无疑问地— iPhone 是这个星球上最重要的相机, 并且我们的业界也证明了这一点。 在度假中? 如果没有在你的 Instagram Story 中留下几张照片,那就不算发生过。 爆炸新闻? 立刻打开 Twitter 来查看哪些媒体在通过照片实时报道事件。 等等。 由于图像在各个平台无处不在的出现,在低性能且内存紧张的情况下展示它们,会很容易地造成失控。 如果我们知道 UIKit 底层到底发生了什么,为什么以及如何处理图像,那么我们可以节省大量的资源开销,并且逃脱无情的系统清除制裁。 理论上来说 突击测验 - 这张我女儿的 266 KB 字节大小(并且还蛮时尚的)的照片,在一个 iOS App 中会展示需要用到多少内存? 剧透一下 - 不是 266 KB,也不是 2.66 MB,而是大概 14 MB。 为什么? 本质上来说 iOS 申请内存是根据图像的尺寸 - 而图像的文件大小反而影响不大。 这张图片的尺寸是 1718 x 2048 像素。 假设每个像素会占用 4 个字节: 1718 * 2048 * 4 / 1024 / 1024 = 13.42 MB 大约 ...

June 19, 2019

Platforms State of the Union(WWDC 2019)

SwiftUI 在 View 层级提供了四种特性: Declarative 通过声明式的语句来描述 UI 布局, 样式, 动画等. Automatic 可交互形动画, 动态字号, 夜间模式都可以通过配置来轻松实现. Compositional 组合性. 各种控件都能极其方便地组合在一起, 远比 UIStackView 方便. VStack(alignment: .leading) { Text(item.title) Text(item.subtitle) } Consistent 自带 Reactive 特性. 将 Model 对象继承自 BindableObject, 并且声明属性为 @State 即可获得当属性改变时, UI 控件自动更新的效果. 真的如果如此美好, 超级吃性能的 xib 和 storyboard 是不是可以退出舞台了. Xcode 11 Live Development 直接在 Xcode Preview 中拖动控件即可生成对应的 SwiftUI 代码. 对应的修改 SwiftUI 代码也能实时在 Preview 中响应. Preview 还能通过提供一个 PreviewProvider 来为其提供数据填充展示, 样式更改甚至循环语句来生成多个 Preview 同时查看控件在夜间模式和白日模式下不同的效果. Preview 部署在设备上也能热加载. Package Management Swift 终于有自己的 Package manage 了. 并且和 Xcode 进行了深度整合. ...

June 5, 2019

为什么 Cocoapods 1.5 支持编译静态库之后大家这么高兴?

昨天在 Twitter 上看到 TualatriX 说把私有库都通过 Cocoapods 编译成静态库之后很爽, 就有点好奇到底是爽在哪里. 于是去搜了一下, 原来是前段时间(大半年前吧…), Cocoapods 发布了 1.5 的 release note, 宣布支持 Swift 静态库编译. 并且文中提到了对于担心动态二进制文件影响应用启动速度的人来说, 这是个了不起的更新. jh 那又是为什么 App 使用静态库会比动态库有更快的启动速度呢? 又跑去搜了一下官方文档. 打开 Dynamic Library Programming Topics 开头就看到: This article introduces dynamic libraries and shows how using dynamic libraries instead of static libraries reduces both the file size and initial memory footprint of the apps that use them. 这篇文章主要介绍了动态库, 并且展示了通过使用动态库而不是静态库, 是如何缩减了应用的大小和初始内存空间的. ┻━┻ (ヽ(`Д ́)ノ( ┻━┻ 这和说好的不一样啊? ...

December 27, 2018