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) 

    } 

} 
+0

如果您使用的内存比预期的多,请查看autorelease池。使用不同的XML解析器,如果没有帮助,它不会一次解析所有内容。 – gnasher729

+0

我发现问题是字典的创建,而不是解析器......但它很奇怪 – Leonardo

我自己解决了这个问题,这个问题是宣言的OD的NSDictionary:如果我有两种NSDictionary中它的工作原理把它分解。 我认为这是编译器的错误。