HTTP Long Polling in Swift

Ich versuche, eine Lösung für lange Abfragen in Swift mit iOS 8 + zu implementieren.

Während die Lösung zweifellos funktioniert und den Haupt-Thread für Interaktionen mit der Benutzeroberfläche frei lässt, steigt die Speichernutzung kontinuierlich an, sodass ich offensichtlich etwas falsch mache. Die Klasse, die ich geschrieben habe, ist wie folgt:

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()
            }
        }
    }
}

Ich habe versucht, die App in Instruments zu profilieren, aber die Ergebnisse sind verwirrend. Ich hoffe, jemand kann mich in die richtige Richtung lenken.

Vielen Dan

Antworten auf die Frage(2)

Ihre Antwort auf die Frage