首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >导致内存泄漏的NSStream.getStreamsToHostWithName

导致内存泄漏的NSStream.getStreamsToHostWithName
EN

Stack Overflow用户
提问于 2014-12-26 08:13:41
回答 1查看 1.2K关注 0票数 2

我能够连接到twitch的聊天和来回发送消息,但是我注意到每次我连接时都会有少量内存泄漏。

下面是导致泄漏的代码的核心。(仅通过多次调用此方法,空应用程序的使用内存从12 of增加到100 of以上)

代码语言:javascript
复制
@IBAction func lotsOfConnects(sender: NSButton) {
    for i in 0..<10_000 {
        var readStream: NSInputStream?
        var writeStream: NSOutputStream?

        NSStream.getStreamsToHostWithName("irc.twitch.tv", port: 6667, inputStream: &readStream, outputStream: &writeStream)

        // Leaks with of without these two lines
        readStream = nil
        writeStream = nil
    }
}

然而,在使用以前的方法时没有泄漏,这在Swift中并不是很好

代码语言:javascript
复制
@IBAction func j(sender: NSButton) {
    for i in 0..<10_000 {
        var readStream:  Unmanaged<CFReadStream>?
        var writeStream: Unmanaged<CFWriteStream>?

        CFStreamCreatePairWithSocketToHost(nil, "irc.twitch.tv", 6667, &readStream, &writeStream)

        var inputStream = readStream!.takeRetainedValue()
        var outputStream = writeStream!.takeRetainedValue()

        readStream = nil
        writeStream = nil
    }
}

是否有办法清理内存,还是必须再继续使用旧方法一段时间?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-07-22 04:32:02

我曾试图在一月份就此事与苹果联系,但今天才收到回复。解决方案是在autoreleasepool NSStream.getStreamsToHostWithName call周围添加,这会导致块一结束就立即释放NSStream内容,而不是“稍后某个时候”,而后者往往是在遥远的将来。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27654575

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档