在Swift中的HTTP长轮询

我试图在iOS 8 +中使用Swift实现一个长轮询解决scheme。

虽然解决scheme无疑是有效的,并且让主线程自由地进行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() } } } } 

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

谢谢

LongPollDelegate很强大,所以你有一个保留周期。 把它变成一个弱variables。