내 새 응용 프로그램에 문제가 있습니다. WebService에서 큰 xml을 가져 와서 구문 분석해야하는데, 모두 XmlToDictionary을 사용하면 훨씬 쉽게 만들 수 있습니다. 내 응용 프로그램을 만들려고 할 때, 내가 작업 관리자를 보면, 내 모든 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)
}
}
예상보다 많은 메모리를 사용하는 경우 자동 복구 풀을보십시오. 한 번에 모든 것을 구문 분석하지 않는 다른 XML 구문 분석기를 사용하면 도움이되지 않습니다. – gnasher729
문제는 파서가 아니라 사전을 만드는 것임을 발견했습니다 ...하지만 너무 이상합니다. – Leonardo