gpt4 book ai didi

swift - swift 将内存设置为 UnsafeMutablePointer

转载 作者:搜寻专家 更新时间:2023-10-31 08:12:44 25 4
gpt4 key购买 nike

我遇到了类型为 UnsafeMutablePointer<UInt8> 的变量的挑战.

我有这个工作代码来分配所有 UInt8 并将其设置为零Swift 中的数组。
var bits = UnsafeMutablePointer<UInt8>(calloc(width * height, 8))

问题是我想在不使用 calloc 方法的情况下完成它。我有这段代码来分配数组
var bits = UnsafeMutablePointer<UInt8>.alloc(width * height)

但我找不到将所有内存设置为零的方法。

我知道我可以这样做,但我认为这不是最好的方法。

for index in 0..< (width * height) {
bits[index] = 0
}

最佳答案

正如@matt 所建议的,您可以使用initializeFrom 来初始化内存。为此,我会使用 Repeat 集合类型,因为它避免了任何临时分配:

var bits = UnsafeMutablePointer<UInt8>.alloc(width * height)
bits.initializeFrom(Repeat(count: width * height, repeatedValue: 0))

(注意,Repeat不需要给出值的类型,可以从bits的类型推断)

如果您发现自己经常这样做,可能值得为 UnsafeMutablePointer 创建一个类似于 calloc 的扩展:

extension UnsafeMutablePointer {
// version that takes any kind of type for initial value
static func calloc(num: Int, initialValue: T) -> UnsafeMutablePointer<T> {
let ptr = UnsafeMutablePointer<T>.alloc(num)
ptr.initializeFrom(Repeat(count: num, repeatedValue: initialValue))
return ptr
}

// convenience version for integer-literal-creatable types
// that initializes to zero of that type
static func calloc<I: IntegerLiteralConvertible>
(num: Int) -> UnsafeMutablePointer<I> {
return UnsafeMutablePointer<I>.calloc(num, initialValue: 0)
}
}

// creates 100 UInt8s initialized to 0
var bits = UnsafeMutablePointer<UInt8>.calloc(100)

关于swift - swift 将内存设置为 UnsafeMutablePointer<UInt8>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30021573/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com