我能够连接到twitch的聊天和来回发送消息,但是我注意到每次我连接时都会有少量内存泄漏。
下面是导致泄漏的代码的核心。(仅通过多次调用此方法,空应用程序的使用内存从12 of增加到100 of以上)
@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
}
}是否有办法清理内存,还是必须再继续使用旧方法一段时间?
发布于 2015-07-22 04:32:02
我曾试图在一月份就此事与苹果联系,但今天才收到回复。解决方案是在autoreleasepool NSStream.getStreamsToHostWithName call周围添加,这会导致块一结束就立即释放NSStream内容,而不是“稍后某个时候”,而后者往往是在遥远的将来。
https://stackoverflow.com/questions/27654575
复制相似问题