Xcode,大量的NsDictionary消耗我所有的RAM
问题描述:
我的新应用程序出现问题。我必须使用XmlToDictionary来获取并解析WebService中的一个大XML,以使所有操作更简单。 当我尝试构建我的应用程序时,如果我查看任务管理器,这是一个耗费我所有RAM的任务(“SourceKit”)。 在互联网上搜索我认为我明白了这个问题:我的解析的结果是一大排NSDictionary与“不明确”类型。Xcode,大量的NsDictionary消耗我所有的RAM
所以我的问题是:你知道另一种方式来管理这个NSDictionary数组吗?或者显式声明这个数组的方法?或者任何其他方式? 这是我的代码:
//The block of the HTTP connection for get the xml form the WebService.
operation.setCompletionBlockWithSuccess({ (operation, response) -> Void in
parser = response as? XMLParser
let XmlPars = XmlParsing()
XmlPars.parsing(parser: parser!)
}, failure: { (operation, error) -> Void in
print(error.localizedDescription)
})
operation.start()
func parsing (parser : XmlParser){
let xmlStruttureTipi = (dictionary["StruttureTipi"] as! NSDictionary)
let struttureTipi = (xmlStruttureTipi[xmlStruttureTipi.allKeys[0]] as! Array<NSDictionary>)
parseStruttureTipi(struttureTipi: struttureTipi)
}
func parseStrutture {
func parseStrutture(strutture : [NSDictionary]) {
let formatter = DateFormatter()
var ArrayStrutture = [Struttura]()
for struttura in strutture{
let s = Struttura()
formatter.dateFormat = "dd-MM-yyyy"
let data = formatter.date(from: struttura["DataAggiornamento"] as! String)!
if(struttura["DataAggiornamento"] != nil){s.DataAggiornamento = data}else{s.DataAggiornamento = formatter.date(from: "00-00-0000")}
if(struttura["Longitudine"] != nil){s.Longitudine = Double((struttura["Longitudine"] as? String)!)}else{s.Longitudine = 0.0}
if(struttura["Latitudine"] != nil){s.Latitudine = Double((struttura["Latitudine"] as? String)!)}else{s.Latitudine = 0.0}
if(struttura["Nome"] != nil)
{s.Nome = struttura["Nome"] as? String}
else{s.Nome = ""}
//A lot other proprety...
ArrayStrutture.append(s)
}
let repoStrutture = RepoStruture()
repoStrutture.insertStrutture(strutture: ArrayStrutture)
}
}
答
我自己解决了这个问题,这个问题是宣言的OD的NSDictionary:如果我有两种NSDictionary中它的工作原理把它分解。 我认为这是编译器的错误。
如果您使用的内存比预期的多,请查看autorelease池。使用不同的XML解析器,如果没有帮助,它不会一次解析所有内容。 – gnasher729
我发现问题是字典的创建,而不是解析器......但它很奇怪 – Leonardo