Swift 结构警告“'UnsafeMutableRawPointer' 的初始化导致指针悬空”

Posted

技术标签:

【中文标题】Swift 结构警告“\'UnsafeMutableRawPointer\' 的初始化导致指针悬空”【英文标题】:Swift Struct Warning "Initialization of 'UnsafeMutableRawPointer' results in a dangling pointer"Swift 结构警告“'UnsafeMutableRawPointer' 的初始化导致指针悬空” 【发布时间】:2020-10-14 16:17:51 【问题描述】:

我搜索了许多类似问题的答案,但找不到解决此问题的正确答案。我有一个非常简单的结构

  struct MyParameters 
    var position: CGPoint
    var size: Float
  

然后这个初始化

 var parameters = MyParameters(position: .zero, size: 0)
 let pointer = UnsafeMutableRawPointer(&parameters)

我在第二行收到警告

 Initialization of 'UnsafeMutableRawPointer' results in a dangling pointer

我了解编译器在抱怨,因为它不确定指针指向的内存是否会继续存在。但是在这种情况下传递指针的正确方法是什么?

【问题讨论】:

【参考方案1】:

使用withUnsafeMutableBytes

func foo() 
    var parameters = MyParameters(position: .zero, size: 0)
    
    withUnsafeMutableBytes(of: &parameters)  pointer in
         // here the lifetime is known
    

【讨论】:

但是当我使用指针时它给出了一个错误 - 无法将“UnsafeMutableRawBufferPointer”类型的值转换为预期的参数类型“UnsafeMutableRawPointer” 您需要访问pointer.baseAddress 才能获得原始指针

以上是关于Swift 结构警告“'UnsafeMutableRawPointer' 的初始化导致指针悬空”的主要内容,如果未能解决你的问题,请参考以下文章

swift 3 present from appdelegate 错误:警告:尝试显示〜其视图不在窗口层次结构中

尝试呈现其视图不在窗口层次结构中的 UIAlertController (Swift 3/Xcode 8)

警告:尝试显示不在窗口层次结构中的视图!迅速

如何解决此错误“警告:尝试呈现其视图不在窗口层次结构中”?

Swift 3 尝试呈现其视图不在窗口层次结构中

FBSDKGRAPHRequestConnection 警告 swift 3