[转载] iOS 高刷屏监控 + 优化:从理论到实践全面解析

原文链接

背景

Apple 在今年推出了支持 ProMotion 屏幕的 iPhone 设备,让 App 在 iPhone 13 Pro 和 iPhone 13 Pro Max 上的最大刷新帧率可到达 120Hz,极大优化了应用滑动/动画的流畅度体验。

ProMotion 并不是一个新的概念,早在 2017 年,Apple 推出的第二代 iPad Pro 便搭载了这一刷新率最高可达 120Hz 的屏幕。在 iPad 上,高刷新率默认对所有 App 启用。而也许是出于能耗的考虑,在 iPhone 上,Apple 并未将这个能力自动对所有 App 启用,而是需要开发者手动添加配置项来进行适配。

近期有消息指出 iOS 15.4 beta 修正了这一行为,经过笔者验证额外的配置项依然是需要的,并且本文内容依然适用。

本文介绍了在 iPhone 上对 ProMotion 动态帧率的适配时观察到的现象和遇到的问题,尝试推测了背后的原理,并探讨了解决问题的可能思路,最终基于调研结果在国际化短视频业务上线优化方案,取得了核心业务指标的收益。

阅读全文 »

Mac 快速重启某个应用

之前在文章 M1 Mac 外接屏幕 开启 HiDPI 方法 介绍了怎么使用免费版本的 BetterDisplay 来开启 M 系列芯片 Mac 外接屏幕的 HiDPI, 但是有个问题是每次拔插 HDMI 数据线或者是 Mac 休眠再激活, 外接屏幕会开始闪, 不知道是不是免费版才有的问题, 我试着重启 BetterDisplay 就好了. 但是每次点击 BetterDisplay 退出, 再找到 BetterDisplay 打开也挺费时间的 (估计在 10 秒左右吧), 一天弄几次影响心情. 我使用 Raycast 写了个脚本, 快速重启 BetterDisplay, 缓解这个问题.

阅读全文 »

[转载] 音乐研发必备:理解 MIDI 协议与标准 MIDI 文件格式

原文地址

1. MIDI 简介

MIDI 协议即数字音乐接口(Musical Instrument Digital Interface),是电子乐器、合成器等演奏设备之间的一种即时通信协议,用于硬件之间的实时演奏数据传递。MIDI 协议诞生之初希望解决的事情是通过统一通信协议让不同乐器制造商的设备可以互相兼容,比如把 Roland 键盘接入 Yamaha 合器。MIDI 协议的编码经过拓展后也可以作为一种记录音乐信息的文件格式,被称为”标准
MIDI 文件格式
“。

在音乐技术研发中除了需要与音频打交道之外,许多场景中还需要直接处理音符信息。如果说 wav 与 mp3 记录的是音乐的物理现象,那么 MIDI 协议与 MIDI 文件则记录的是音乐这门语言的”文字”。本文的目的是让开发中涉及到音乐”本体“的同学可以了解这一最通用的演奏信息交互和文件存储格式的编码规则。同时通过对 MIDI 事件流等概念的认识,能在开发中更好地抽象自己的业务逻辑。

阅读全文 »

[转载] 深入理解 OC/C++ 闭包

原文地址

背景

苹果的 Objective-C 编译器允许用户在同一个源文件里自由地混合使用 C++ 和 Objective-C,混编后的语言叫 Objective-C++。相对于其它语言(例如 Swift、Kotlin、Dart 等)和 C++的文件隔离和架桥通信(例如 Kotlin 使用 JNI,Dart 使用 FFI),Objective-C 和 C++的同文件混编方式无疑是令人舒畅的。OC/C++混编虽然可以在一个文件中进行编写,但是有一些注意事项需要解:Objective-C++没有为 OC 类增加 C++的功能,也没有为 C++增加 OC 的功能,例如:不能用 OC 语法调用 C++对象,也不能为 OC 对象增加构造函数和析构函数,也不能将this和self互相替换使用。类的体系结构是独立的,C++类不能继承 OC 类,OC 类也不能继承 C++类。

本文主要就之前令人困惑的 OC 的Block和 C++的 lambda 混编问题 做一些探索。

实验环境:C++版本为 C++14,OC 只局限于 ARC。

阅读全文 »

[转载] 移动端渲染原理浅析

转载: 原文地址

计算机或手机的渲染是一个非常复杂的过程,本文介绍了渲染相关的一些基础知识,并结合 iOS 和安卓的技术框架介绍了移动端渲染原理,最后详细的解析了 iOS 中的离屏渲染以及圆角优化的一些方法。

阅读全文 »

[转载] 从响应式编程到 Combine 实践

转载: 原文地址

大约一年前,Resso 接入了 Combine,利用响应式编程简化了代码逻辑,也积累了很多实践经验。本文会从响应式编程的基本思想并逐步深入介绍 Combine 的概念与最佳实践,
希望能帮助更多的同学顺利上手并实践响应式编程,少踩坑。

等等,Resso 是什么?Resso 来源于Resonate(共鸣),是字节跳动推出的一个社交音乐流媒体平台,专为下一代音乐发烧友设计,使他们能够通过对音乐的热爱来表达和与他人建立联系。

书回正文,所谓的响应式编程到底是什么呢?

熟悉 Combine 的同学可以直接跳到实践建议部分。

响应式编程

维基百科对响应式编程的定义是:

在计算中,响应式编程是一种面向数据流和变化传播的声明式编程范式。

虽然定义中每个字都认识,但连起来却十分费解。我们可以把定义中的内容分开来理解,逐个击破。首先,让我们来看下声明式编程。

阅读全文 »