微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

UnsafeMutablePointer使用我的结构获得EXC_BAD_ACCESS

如何解决UnsafeMutablePointer使用我的结构获得EXC_BAD_ACCESS

打印效果很好

decoded hostoryCount 2 layersCount 1 size PixelSize(width: 1024,height: 1024)

但是在打印效果良好后我会遇到致命错误

Thread 1: EXC_BAD_ACCESS (code=1,address=0x94753cf25f30)

我的代码


struct RGBA {
    
    var r: UInt8
    var g: UInt8
    var b: UInt8
    var a: UInt8
}

class TestData {

    let canvas = // canvas is [[RGBA]]

    let testLayer = LayerRGBA(canvas: canvas)
    let testAnimation = AnimationRGBA([testLayer])
    
    let testHistory = HistoryRGBA(layers: [testLayer],animations: [testAnimation])
    let testValue: TEST = [testHistory,testHistory]
    
    let enc = TestArchiver.encode(value: testValue)
    let dec = TestArchiver.decode(data: enc)
  
    
    print("decoded","hostoryCount",dec.count,"layersCount",dec[0].layers.count,"size",dec[0].layers[0].size)
    // get error Thread 1: EXC_BAD_ACCESS (code=1,address=0x94753cf25f30)
}

typealias TEST = [HistoryRGBA]

class TestArchiver {
    
    static func encode(value: TEST) -> NSData {
        var val = value
        return withUnsafePointer(to: &val) { pointer in
            NSData(bytes: pointer,length: MemoryLayout.size(ofValue: value))
        }
    }
    
    static func decode(data: NSData) -> TEST {
        let pointer = UnsafeMutablePointer<TEST>.allocate(capacity: MemoryLayout.size(ofValue: TEST.self))
        data.getBytes(pointer,length: data.length)
        
        return pointer.move()
    }
}

谢谢

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。