2016-05-31 27 views
1

Ich benutze CFStreamCreateBoundPair, um ein Paar von Stream zu erstellen, um eine große Datei hochladen.Der Code ist wie folgt.CFStreamCreateBoundPair kann nicht frei

let readStreamPointer = UnsafeMutablePointer<Unmanaged<CFReadStream>?>.alloc(1) 
let writeStreamPointer = UnsafeMutablePointer<Unmanaged<CFWriteStream>?>.alloc(1) 
let bufferSize = 1024*1024 //1M buffer size 
CFStreamCreateBoundPair(kCFAllocatorDefault, readStreamPointer,writeStreamPointer, Int(bufferSize) as CFIndex) 
if let rStream = readStreamPointer.memory?.takeRetainedValue(),writeStream = writeStreamPointer.memory?.takeRetainedValue() { 

} 

Alles geht gut, außer einem Speicher mit Instrumenten issue.I Check-out und CFStreamCreateBoundPair herausfinden kann, nicht die Erinnerung an Puffergröße befreien, die in diesem Fall ist 1M, nachdem sowohl die CFReadStream und CFWriteStream sind closed.I eine haben Screenshot auch.

Instruments screen shot Ich bin nicht vertraut mit Core Foundation Framework in Swift und weiß nicht, warum es nicht automatisch veröffentlicht werden kann. Hier

Antwort

0

ist so, wie ich es tun:

class func createBound(inputStream: inout InputStream?, outputStream: inout OutputStream?, bufferSize: UInt) { 
    var readStream: Unmanaged<CFReadStream>? 
    var writeStream: Unmanaged<CFWriteStream>? 
    CFStreamCreateBoundPair(nil, &readStream, &writeStream, CFIndex(bufferSize)) 
    if inputStream != nil { 
     inputStream = readStream!.takeUnretainedValue() 
    } 
    if outputStream != nil { 
     outputStream = writeStream!.takeUnretainedValue() 
    } 
}