Eu tinha um código que parecia quase exatamente o que você estava fazendo e estava recebendo o mesmo aviso. Os meus diferiram ligeiramente de uma maneira que é relevante para a discussão
init<T>(from value: T) {
var value = value
self.init(buffer: UnsafeBufferPointer(start: &value, count: 1))
}
Isso ainda gera o aviso de que o UnsafeBufferPointer está produzindo um ponteiro pendente, mas as dicas dizem "produz um ponteiro válido apenas pela duração da chamada para 'init (start: count :)'"
Mas o retorno de UnsafeBufferPointer não está atribuído a nada, então eu não poderia usá-lo fora do escopo do init se tentasse. Portanto, o compilador aqui está me alertando contra fazer algo que não posso fazer de qualquer maneira.
Eu acho que Data.init (buffer :) poderia estar armazenando o ptr, mas eu assumiria que, se ele aceita um UnsafeBufferPointer, está aceitando a responsabilidade de usá-lo corretamente
Enfim, isso ainda não resolve o seu problema. Eu contornei o aviso com isso
init<T>(from value: T) {
var value = value
var myData = Data()
withUnsafePointer(to:&value, { (ptr: UnsafePointer<T>) -> Void in
myData = Data( buffer: UnsafeBufferPointer(start: ptr, count: 1))
})
self.init(myData)
}
E isso não gera o aviso e parece funcionar (no meu aplicativo de qualquer maneira). A questão de saber se é aprovada pelos especialistas aqui é outra questão.
Meio que me deixa nostálgico pelos dias de HLock e HUnlock