gpt4 book ai didi

ios - Swift 中的 HTTP 长轮询

转载 作者:搜寻专家 更新时间:2023-10-31 19:30:26 26 4
gpt4 key购买 nike

我正在尝试使用 iOS 8+ 在 Swift 中实现一个长轮询解决方案。

虽然该解决方案无疑有效并让主线程空闲用于 UI 交互,但内存使用量不断攀升,所以我显然做错了什么。我写的类如下:

enum LongPollError:ErrorType{
case IncorrectlyFormattedUrl
case HttpError
}

public class LongPollingRequest: NSObject {
var GlobalUserInitiatedQueue: dispatch_queue_t {
return dispatch_get_global_queue(Int(QOS_CLASS_USER_INITIATED.rawValue), 0)
}

var GlobalBackgroundQueue: dispatch_queue_t {
return dispatch_get_global_queue(Int(QOS_CLASS_BACKGROUND.rawValue), 0)
}

var longPollDelegate: LongPollingDelegate
var request: NSURLRequest?

init(delegate:LongPollingDelegate){
longPollDelegate = delegate
}

public func poll(endpointUrl:String) throws -> Void{
let url = NSURL(string: endpointUrl)
if(url == nil){
throw LongPollError.IncorrectlyFormattedUrl
}
request = NSURLRequest(URL: url!)
poll()
}

private func poll(){
dispatch_async(GlobalBackgroundQueue) {
self.longPoll()
}
}

private func longPoll() -> Void{
autoreleasepool{
do{
let urlSession = NSURLSession.sharedSession()
let dataTask = urlSession.dataTaskWithRequest(self.request!, completionHandler: {
(data: NSData?, response: NSURLResponse?, error: NSError?) -> Void in
if( error == nil ) {
self.longPollDelegate.dataReceived(data)
self.poll()
} else {
self.longPollDelegate.errorReceived()
}
})
dataTask.resume()
}
}
}
}

我曾尝试在 Instruments 中分析应用程序,但结果令人困惑。我希望有人能指出我正确的方向。

谢谢

最佳答案

LongPollDelegate 很强大,所以你有一个保留周期。使其成为弱变量。

关于ios - Swift 中的 HTTP 长轮询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34513887/

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