代码之家  ›  专栏  ›  技术社区  ›  Jules

swift中不安全分配内存的自动处理

  •  0
  • Jules  · 技术社区  · 6 年前

    在与低级操作系统功能交互的swift程序中,我分配“不安全”内存块以缓冲数据。这些块存储在 struct 它可以在程序的各个部分传递如何跟踪这些副本并确保在完成所有副本后释放内存块?

    示例代码:

    struct Packet {
        var memoryBlock : UnsafeRawPointer
        init () {
            let block = UnsafeMutableRawPointer.allocate (bytes: 128, alignedTo: 4)
            someProcessThatFillsTheBuffer (block); 
            memoryBlock = UnsafeRawPointer(block);
        }
    }
    
    let packet = Packet()
    process1.handle (packet); process2.handle (packet)
    

    如何确保分配的块在process1和process2完成后被释放?

    在C++中,我会使用 shared_ptr 以跟踪分配斯威夫特有类似的东西我可以用吗使用现有电弧系统的一些方法?

    1 回复  |  直到 6 年前
        1
  •  1
  •   Martin R    6 年前

    您可以定义 class 而是释放内存 deinit 以下内容:

    class Packet {
        var memoryBlock : UnsafeRawPointer
        init() {
            let block = UnsafeMutableRawPointer.allocate(byteCount: 128, alignment: 4)
            //someProcessThatFillsTheBuffer (block);
            memoryBlock = UnsafeRawPointer(block);
        }
    
        deinit {
            memoryBlock.deallocate()
        }
    }
    

    现在的实例 Packet 参考文献 对一个物体 传来传去ARC(自动参考计数)确保 脱硝 当最后一次引用 物体不见了。