Slhack
02-04-2015, 13:21
Ciao a tutti,
ho creato un'app che scarica i files da un URL e li salva in un percorso nella documents dell'IPAD.
I files che vengono scaricati son circa 10000 tutti tra i 20 e i 50Kb. Quello che ho notato è che nonostante pulisca la variabile o comunque vada a scrivere sempre nella stessa variabile, l'utilizzo di memoria sale sempre fino a mandare in crash l'APP (dopo circa 2000 documenti)
Ho provato di tutto ma la memoria si libera soltanto quando finisce il loop...Questo evento di download viene scatenato dalla pressione di una cella di una tableview.
Ho notato che l'aumento di memoria è dato da questa riga:
dataVal = NSData(contentsOfURL: self.URL)
sembra che si tenga in memoria tutte le chiamate precedenti...ho googlato per giorni e non ho trovato niente (o se c'è probabilmente non ho usato le chiavi di ricerca giuste...)
Qualcuno mi aiutiiii!
Grazie a tutti
Di seguito il Codice che viene eseguito nel loop (che viene richiamato dopo aver scaricato una lista dei files da scaricare da un webservice):
var err: NSErrorPointer = NSErrorPointer()
let fm = NSFileManager.defaultManager()
dataVal = NSData(contentsOfURL: self.URL)
var isDir: ObjCBool = false
if (!fm.fileExistsAtPath(writeP, isDirectory: &isDir)){
fm.createDirectoryAtPath(writeP, withIntermediateDirectories: true, attributes: nil, error: nil)
}
if (dataVal != nil){
let ex: Bool = fm.fileExistsAtPath(writeP + "/" + fileDaSalvare)
if (ex)
{
fm.removeItemAtPath(writeP + "/" + fileDaSalvare, error: err)
}
dataVal?.writeToFile(writeP + "/" + fileDaSalvare, atomically: true)
}
dataVal = nil
return;
ho creato un'app che scarica i files da un URL e li salva in un percorso nella documents dell'IPAD.
I files che vengono scaricati son circa 10000 tutti tra i 20 e i 50Kb. Quello che ho notato è che nonostante pulisca la variabile o comunque vada a scrivere sempre nella stessa variabile, l'utilizzo di memoria sale sempre fino a mandare in crash l'APP (dopo circa 2000 documenti)
Ho provato di tutto ma la memoria si libera soltanto quando finisce il loop...Questo evento di download viene scatenato dalla pressione di una cella di una tableview.
Ho notato che l'aumento di memoria è dato da questa riga:
dataVal = NSData(contentsOfURL: self.URL)
sembra che si tenga in memoria tutte le chiamate precedenti...ho googlato per giorni e non ho trovato niente (o se c'è probabilmente non ho usato le chiavi di ricerca giuste...)
Qualcuno mi aiutiiii!
Grazie a tutti
Di seguito il Codice che viene eseguito nel loop (che viene richiamato dopo aver scaricato una lista dei files da scaricare da un webservice):
var err: NSErrorPointer = NSErrorPointer()
let fm = NSFileManager.defaultManager()
dataVal = NSData(contentsOfURL: self.URL)
var isDir: ObjCBool = false
if (!fm.fileExistsAtPath(writeP, isDirectory: &isDir)){
fm.createDirectoryAtPath(writeP, withIntermediateDirectories: true, attributes: nil, error: nil)
}
if (dataVal != nil){
let ex: Bool = fm.fileExistsAtPath(writeP + "/" + fileDaSalvare)
if (ex)
{
fm.removeItemAtPath(writeP + "/" + fileDaSalvare, error: err)
}
dataVal?.writeToFile(writeP + "/" + fileDaSalvare, atomically: true)
}
dataVal = nil
return;