D95ffd7c1201f0b5da0720edd8d964b4
交流群问题汇总、延伸

建立本专栏的交流群之后,来了挺多朋友,陆续也会有一些问题产生、交流。有些问题也挺有意思,值得讨论。但是发现,问题如果没有汇总,下次查阅比较麻烦,另外新朋友来了,就错过了这些信息,也有可能会重复抛出某个问题。

所以,就开了篇文章,专门整理这些有意义的内容。旨在碎片知识点汇总+延伸、信息同步、资源共享。

PS:

本文定期更新,来源都是群内交流。

文章排序按时间先后,内容有 “大” 有 “小”,可独立翻阅。

订阅后的朋友,可以加我微信:wxidlongze,拉你进群。交流,扯淡~

目录:


已整理完毕:

1. 有没有 Metal 相关的教程、视频推荐?

介绍下自己看过,觉得不错的一些资料,外文为主,国内的基本都是翻译。

书籍:

Metal Programming Guide

Metal Shading Language Specification

这两本是 Apple 官方维护的,权威,完整。首选。

Metal by Example

最早的一本非官方书籍,2014 第一时间就开始输出 Metal 相关教程,很经典。

Metal Programming Guide: Tutorial and Reference via Swift

这本是 2018 年初发售的,比较新。一个女程序员写的,内容比较基础,说实在比较失望。查缺补漏可以看下。

Metal by Tutorials

RayWenderlich 家的书,质量就不用说了,内容比较全面,已经发售,目前还在更新中。

博客:

MetalKit

推荐,也有朋友在做这个系列的翻译了:MetalKit 中文翻译

Metal By Example

Metal Tutorial with Swift 3

PS:

当然,如果你认可,我的这个专栏,也会陆续输出 Metal 相关的教程。

视频:

WWDC Sessions

这几年都有 Metal 相关的 Sessions,干货很多,首选

Programming Metal in iOS

YouTube 上这个系列不错,同样是 RayWenderlich 出品。

另外,有部分朋友反馈,YouTube 访问不了,所以我把相关视频下载,放到百度云上了,额外加了双语字幕,降低学习成本。

链接见文末,定期更新新内容。

2. 为什么需要强制解码,好处是什么?

这个问题,是针对我们在 Image and Graphics Best Practices,总结及延伸 中提到的:

设置 kCGImageSourceShouldCacheImmediatelytrue强制解码。避免等到显示渲染时才解码(默认选项)。

强制解码,有个很关键的点就是,放到子线程中异步处理

文中提到过,如果不提前解码,那么要等到渲染的时候,即 setImage 的时候隐式解码,这一步必须发生在主线程。考虑一个场景,列表很多图片,滑动的时候,加载图片,主线程解码,显然会造成卡顿。

PS:
所以关键就是子线程提前解码,解码后的图片丢到主线程去显示,就不会在主线程发生解码这个耗时操作。

3. Image Assets 对包体积有什么优化(图片方面)?

Slicing is the process of creating and delivering variants of the app bundle for different target devices.

iOS 9 之后,引入了 App Slicing 这个概念。App Slicing 大致就是 App Store 会根据不同的设备准备不同的安装包(App Variant),每个安装包(App Variant)都只有相应尺寸的图片。

比如 iPhone 6 去下载时,只会下载到 @2x 的图片的安装包。

但要有这个优化,前提是图片必须放置在 .xcassets 中管理。

top Created with Sketch.