Ich verwende eine Master-Detail-Anwendung. Master-Screen ist ein Armaturenbrett und ein Elements zur Auswahl, bewegt sich auf den detaillierten Bildschirm, wo ich löse eine Alamofire
Anfrage im BackendAlamofire-Anforderung gibt Speicher Warnung
unten ist der Schnipsel
class APIManager: NSObject {
class var sharedManager: APIManager {
return _sharedManager
}
private var requests = [Request]()
// Cancel any ongoing download
func cancelRequests() {
if requests.count > 0 {
for request in requests {
request.cancel()
}
}
}
func getData(completion: (dataSet: [Data]?, error: NSError?) -> Void) {
let request = Alamofire.request(.GET, "http://request")
.response { (request, response, data, error) in
dispatch_async(dispatch_get_main_queue(), {
if(error == nil) {
if let response = data, data = (try? NSJSONSerialization.JSONObjectWithData(response, options: [])) as? [NSDictionary] {
var dataSet = [Data]()
for (_, dictionary) in data.enumerate() {
let lat = dictionary["Latitude"]
let lng = dictionary["Longitude"]
let id = dictionary["ID"] as! Int
let data = Data(lat: lat!, long: lng!, id: shuttleID)
dataSet.append(data)
}
completion(dataSet: dataSet, error: nil)
}
} else { completion(dataSet: nil, error: error) }
})
}
requests.append(request)
}
}
ich eine Singleton API-Managerklasse habe und von der Detailansicht Controller Ich rufe getData()
Funktion. Alles funktioniert gut.
Aber wenn ich wiederholt drücken und poppen, sehe ich einen schnellen Anstieg im Speicher und nach 10-15 Versuchen bekomme ich Speicherwarnung. In der AppDelegate
verwalte ich es jedoch, eine Warnmeldung anzuzeigen und einen Verzögerungs-Timer für 8 Sekunden hinzuzufügen. Aber nach 20-25 Versuchen stürzt App wegen Speicherwarnung ab.
In viewWillDisappear()
storniere ich alle laufenden Anfragen auch. Aber ich konnte das Speicherwarnungsproblem nicht stoppen. Ich habe den Teil kommentiert, an dem ich die Anfrage anrufe, ich sehe keine Probleme, selbst der Speicherverbrauch ist geringer.
Ich begrüße Ideen.