Ich programmiere mit Swift 2.2 unter Mac OS X 10.11. Ich habe eine Funktion, die wie folgt aussieht:Swift UnsafeMutablePointer Speicherzuweisung und Freigabe in einer Funktion
func aFunction(direntPointer: UnsafePointer<dirent>, usingBuffer bufPointer: UnsafeMutablePointer<CChar>) {
let tempBuf = UnsafeMutablePointer<CChar>.alloc(2048)
... [put the filename from the dirent into tempBuf and do some processing]
// Transfer the data in the temporary buffer into the provided buffer
bufPointer.moveAssignFrom(tempBuf, count: 2048)
// Seems necessary, but destroys the data in bufPointer as well
tempBuf.dealloc(2048)
return
}
Die BUFPOINTER eingerichtet ist, in einer Aufruffunktion als:
let bufPointer = UnsafeMutablePointer<CChar>.alloc(2048)
Nach der Rückkehr in die aufrufende Routine, BUFPOINTER keine gültigen Daten enthalten. Wenn ich den Methodenaufruf tempBuf.dealloc() jedoch entferne, enthält tempBuf gültigen Speicher und die Routine funktioniert wie erwartet. Laut der Literatur zerstört die moveAssignFrom() -Methode den Quellspeicher effizienter, indem eine separate move() und dann destroy() ausgeführt wird.
Meine Frage ist, ob der Aufruf der dealloc() -Methode notwendig ist, um einen Speicherverlust zu vermeiden, oder wenn es nicht wichtig ist, weil es auf dem Stapel erstellt wird und gerade bei der Rückkehr zerstört wird? Die Apple-Literatur besagt, dass zugeteilter Speicher freigegeben werden muss, aber ich kann keine gültigen Daten zurückgeben, wenn es freigegeben wird.
Vielleicht gibt es einen besseren Weg, dies zu tun? Der Zweck des Funktionsaufrufs besteht darin, den Code zu konsolidieren, um zu vermeiden, dass er wiederholt wird, da er von mehreren Stellen aufgerufen wird, und um den Dateinamen zu verarbeiten, der von der Dirent abgerufen wird.
Sie