gpt4 book ai didi

swift - NSStream.getStreamsToHostWithName 导致内存泄漏

转载 作者:可可西里 更新时间:2023-11-01 01:06:29 24 4
gpt4 key购买 nike

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

这是导致泄漏的核心代码。 (只调用多次这个方法,空应用的内存从12MB增加到100多MB)

@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 中不太好

@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
}
}

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

最佳答案

我曾在 1 月份尝试就此问题联系 Apple,今天才收到回复。解决方案是在 NSStream.getStreamsToHostWithName 调用周围添加autoreleasepool,这会导致 NSStream 内容在 block 完成后立即被释放,而不是'sometime later' 这往往是在遥远的 future 。

关于swift - NSStream.getStreamsToHostWithName 导致内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27654575/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com