1

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

}

メモリの問題以外はすべてうまくいきます。Instruments に確認したCFStreamCreateBoundPairところ、バッファ サイズのメモリを解放できないことがわかりました。この場合、両方を閉じた後、1Mです。CFReadStreamCFWriteStream

楽器のスクリーンショット 私は迅速な Core Foundation フレームワークに精通しておらず、自動リリースできない理由がわかりません。

4

1 に答える 1

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()
    }
}
于 2016-12-17T21:35:27.543 に答える