【问题标题】:CFStreamCreateBoundPair can not freeCFStreamCreateBoundPair 无法释放
【发布时间】:2016-05-31 02:05:43
【问题描述】:

我使用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 无法释放缓冲区大小的内存,在这种情况下,CFReadStreamCFWriteStream 都关闭后为 1M。我也有截图。

我对swift中的Core Foundation框架不太熟悉,不知道为什么不能自动发布。

【问题讨论】:

    标签: ios swift instruments core-foundation cfstream


    【解决方案1】:

    这是我的做法:

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

    【讨论】:

      猜你喜欢
      • 2013-07-30
      • 2019-08-10
      • 1970-01-01
      • 1970-01-01
      • 2022-01-22
      • 1970-01-01
      相关资源
      最近更新 更多