UITextView 模拟标签功能
需求需要实现一个 类似于微博文本中 标签的能力, 一般我们用 YYTextView 配合 YYTextParser 很容易可以写出来, 参考, 但是当我们必需需要用 UITextView 来实现的时候, 就很麻烦了, 因为 YYTextView 不是继承的 YYTextView, 他们是兄弟关系, 强行替换需要修改所有引用该文本的逻辑, 风险较大.
怎么基于 UItextView 实现一套标签能力呢?
需求需要实现一个 类似于微博文本中 标签的能力, 一般我们用 YYTextView 配合 YYTextParser 很容易可以写出来, 参考, 但是当我们必需需要用 UITextView 来实现的时候, 就很麻烦了, 因为 YYTextView 不是继承的 YYTextView, 他们是兄弟关系, 强行替换需要修改所有引用该文本的逻辑, 风险较大.
怎么基于 UItextView 实现一套标签能力呢?
参考:
TypeScript 是一种由微软开发的自由和开源的编程语言。它是 JavaScript 的一个严格超集,并添加了可选的静态类型和基于类的面向对象编程。TypeScript 的设计目标是开发大型应用,然后转译成 JavaScript 运行。由于 TypeScript 是 JavaScript 的超集,任何现有的 JavaScript 程序都是合法的 TypeScript 程序。
Cocos 是全球领先的游戏引擎,拥有强大的跨平台开发能力,同时具备易上手、轻量化、开源、免费、高能等优势。Cocos 小游戏系列文章将记录1个月内了解并掌握 Cocos 专项技能,最终达到开发 Cocos 相关游戏项目的能力。
[转载] 头条稳定性治理:ARC 环境中对 Objective-C 对象赋值的 Crash 隐患
ARC 环境下在多线程中执行赋值代码可能会产生野指针,导致 EXC_BAD_ACCESS 崩溃。
这种崩溃发生的概率很低,在开发和灰度阶段即使执行到相应代码也很难崩溃,因此容易遗漏到正式环境。在上亿级用户的 App 往往会成为 Top 问题,对指标造成影响,并且很难排查。
今日头条在治理 Crash 的过程中彻底解决了数十个此类崩溃,发现其具有一定共性。本文详细分析崩溃发生的过程,以及总结了容易出现问题的场景,希望在大家遇到此类问题时能提供一些思路。
[转载] 抖音 Swift 编译优化 - 基于自定义 Toolchain 编译提速 60%
本文重点探讨全部模块化后带来的依赖解析瓶颈,主要包括对头文件增量编译分析等内容。
优化方案基于 Swift Toolchain 源码,本文不再探讨 Toolchain 相关基本概念及配置流程等,仅聚焦方案本身。
随着混编落地的业务场景越来越多,越来越大,开发中出现的性能痛点开始显现,问题很明显集中在被 Swift 环境所依赖的 OC 仓的头文件改动上。因此基建架构把重点放在接口层依赖的性能分析上,力求解决性能瓶颈。
抖音基础技术团队借助自定义 Toolchain 能力,通过自定义编译参数,裁剪 Clang Header 指定内容,最终实现编译提速 60% 。
本方案已于 2022 年 11 月底上线,在抖音稳定运行近 5 个月。下面就让我们一起回顾下整个方案从提出到落地的全过程。
图片库加载服务是为bilibili打造的移动端一站式解决方案,集图像加载、显示、处理、监控于一体,以高可用、高性能、可高度定制、数据服务、省流量五大核心优势被公司各个业务接入使用,经过长期的迭代与维护,已成熟稳定。
在如今越来越看重体验的大环境下,对图片库的要求也日益攀升。从成本的角度来看,使用AVIF格式可以节省大量的网络带宽和存储空间,减少网站加载时间,并且可以改善用户体验,进而提高网站的效率和收益,从而节约大量的费用。
AVIF格式能够带来许多优势,首先,AVIF格式具有明显的压缩率优势,可以比其他常用图片格式(如JPEG、PNG)节省更多的存储空间,减少图片加载所需时间和带宽,提高网站加载速度,提高访问者的体验;其次,AVIF格式丰富的特性支持,可以支持更多的设备和浏览器,提高图片的可用性,并可以免专利费的优势;最后,AVIF格式支持图片的质量优化,可以保证图片的质量,同时节省更多的容量。
端内文件上传, 之前各个业务都是自己写的上传, 有的是用 PUT 请求, 有的是放在业务POST请求的 body 中, 对于批量图片上传由于担心上传长时间抢占带宽设置了30 秒强制超时, 对于大文件比如视频上传则是业务自己实现了分片上传, 上传逻辑复杂, 业务自己实现细节繁多, 成功率也不高. 后来切换到了腾讯云的 COS 上传, 图片上传成功率由97.5% 上升至 99.13%, 视频上传成功率由 92.88% 上升到 96.92%. 同时将 COS上传 封装为通用的上传逻辑, 输入支持磁盘文件/内存对象的上传, 输出支持进度以及结果回调, 并额外支持了秒传/断点续传/分片上传/批量上传/取消上传/秘钥小颗粒权限以及自动续期/容灾/全球加速/IPv6/结果统计/安全打击/灵活扩容/拓展灵活(如图片格式/尺寸/视频入库...)等能力.