2016-05-31 2 views
1

Я использую CFStreamCreateBoundPair, чтобы создать пару потоков, чтобы загрузить большой файл. Код выглядит следующим образом.CFStreamCreateBoundPair не может бесплатно

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() { 

} 

Все идет хорошо, кроме памяти issue.I проверить с инструментами и выяснить, CFStreamCreateBoundPair не может освободить память размера буфера, который в данном случае является 1M после как CFReadStream и CFWriteStream являются closed.I есть экран тоже снят.

Instruments screen shot Я не очень хорошо знаком с каркасом Core Foundation и не знаю, почему он не может быть выпущен автоматически.

ответ

0

Вот как я это делаю:

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() 
    } 
} 
Смежные вопросы