В программе 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)
Как я могу гарантировать, что выделенный блок будет удален после того, как процесс 1 и процесс 2 закончат с ним?
В C++ я бы использовал shared_ptr
для отслеживания распределения. Есть ли у Swift что-то подобное, что я могу использовать для этого? Какой-то способ использовать существующую систему ARC для этого?