【发布时间】:2020-07-09 01:28:36
【问题描述】:
有时我需要将字节数组的一部分清零。使用 for 循环,这很慢。使用 memset() 函数要快得多。我有以下代码将清除数组“a”的元素 200 到 299。
var a: [UInt8] = [UInt8](repeating: 1, count: 1000) // a[0..999] set to 1
start = 200
length = 100
memset(&a + start, 0, length) // a[100..199] set to 0
在带有 Xcode 11.4 的 Swift 5.2 出来之前,这一直很好。现在它也可以工作了,但是会出现警告:
Inout 表达式创建一个临时指针,但参数 #1 应该是一个比对 '+' 的调用寿命更长的指针
这是怎么做到的,没有警告。? Andybody 有什么想法吗?
更多解释是 Xcode 中的 whows:
从“[UInt8]”到“UnsafeMutableRawPointer”的隐式参数转换会生成一个指针,该指针仅在调用“+”期间有效
在 Array 上使用“withUnsafeMutableBytes”方法,以便将参数显式转换为对定义范围有效的缓冲区指针
我不明白,这是什么意思。
【问题讨论】: