【问题标题】:In Swift 3.1, UnsafeMutablePointer.initialize(from:) is deprecated在 Swift 3.1 中,不推荐使用 UnsafeMutablePointer.initialize(from:)
【发布时间】:2023-03-04 15:03:02
【问题描述】:

在 Swift 3.1 中,不推荐使用 UnsafeMutablePointer.initialize(from:)。 Xcode 建议我改用 UnsafeMutableBufferPointer.initialize(from:) 。我有一个看起来像这样的代码块:

let pointer = UnsafeMutablePointer<UInt8>.allocate(capacity: 64)
pointer.initialize(from: repeatElement(0, count: 64))

由于弃用,代码给了我一个编译时警告。所以我要把它改成:

let pointer = UnsafeMutablePointer<UInt8>.allocate(capacity: 64)
let buffer = UnsafeMutableBufferPointer(start: pointer, count: 64)
_ = buffer.initialize(from: repeatElement(0, count: 64))

这是正确的方法吗?我只是想确保我做得正确。

【问题讨论】:

    标签: swift unsafemutablepointer


    【解决方案1】:

    这是正确的,但您可以使用更简单的方式分配和初始化内存

    let pointer = UnsafeMutablePointer<UInt8>.allocate(capacity: 64)
    pointer.initialize(to: 0, count: 64)
    

    创建一个 buffer 指针视图仍然很有用,因为 是一个集合,有一个count 属性并且可以枚举:

    let buffer = UnsafeMutableBufferPointer(start: pointer, count: 64)
    
    for byte in buffer {
        // ...
    }
    

    但这与内存的初始化方式无关。

    【讨论】:

    • 没有回答问题...
    • @StackUnderflow:问题是 “这是正确的方法吗?” 我用 “它是正确的” 来回答——然后是一个更简单的解决方案。请让我知道您对此有什么不清楚的地方。
    • 编译时警告仍然存在。
    • @StackUnderflow:这很奇怪。我刚刚仔细检查了 Xcode 9.2 (Swift 4) 和 Xcode 9.3 beta 3 (Swift 4.1) 上面的代码编译时没有警告。 – 你在哪一行得到什么确切的警告?
    猜你喜欢
    • 2018-03-15
    • 2017-03-26
    • 2012-05-10
    • 2019-08-18
    • 1970-01-01
    • 2019-08-18
    • 1970-01-01
    • 1970-01-01
    • 2019-05-13
    相关资源
    最近更新 更多