今天看啥  ›  专栏  ›  字节跳动技术团队

在 Swift 中如何正确传递 Unsafe Pointers 参数

字节跳动技术团队  · 公众号  ·  · 2024-09-18 18:01

文章预览

TL;DR Swift 中对于类型大小为空的变量使用 & 取地址是未定义行为,编译为目标码之后的体现为一个根据之前代码执行结果产生的任意数值。这是一个 feature。 Swift 中在多个线程中对同一个变量使用 & 将获取「写访问」,会造成运行时崩溃。 Swift 中对 computed property 取地址会取到临时变量的地址。如果 computed property 是一个锁,将造成锁被拷贝到多个线程的执行栈上,造成程序错误。 平平无奇但错误的代码 在过去一个季度抖音规模化落地 Swift 组件的过程中,我负责的代码在 CI 运行单测阶段暴露了几个问题,都与 Swift 中的 unsafe pointers 有关。 第一个是通过 Objective-C 中 associated object 技巧扩展出来的 property 在 release build 后再运行,set 之后只能 get 到 nil ;debug build 下则正常: 范例代码一 第二个是下列代码在 release build 后,在多线程环境有可能崩溃 ………………………………

原文地址:访问原文地址
快照地址: 访问文章快照
总结与预览地址:访问总结与预览