私はMaster Detail Applicationを使用しています。マスター画面がダッシュボードで、項目を選択する上で、私はバックエンド以下Alamofireリクエストでメモリ警告が発生する
でAlamofire
要求は私はシングルトンAPIマネージャクラスを持っているとの抜粋
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)
}
}
あるトリガー詳細画面に移動しますディテールビューコントローラgetData()
機能を呼び出します。すべてうまく動作します。
しかし、繰り返し押してポップアップすると、メモリが急激に増加し、10-15回の試行後にメモリ警告が表示されます。しかし、AppDelegate
では、アラートメッセージを表示し、遅延タイマーを8秒追加するように管理しています。しかし、メモリの警告のために20〜25回の試行後にアプリがクラッシュする。
viewWillDisappear()
では、進行中のリクエストもキャンセルします。しかし、私はメモリ警告の問題を停止することができませんでした。私はリクエストと呼ばれる部分についてコメントしました。問題はなく、メモリ消費量も少なくなっています。
私はアイデアを歓迎します。