나는 (아주) 커다란 csv 파일을 잡기위한 핵심 데이터로 가져 오는 앱을 만들고 있습니다. 이 과정은 이런 식입니다 :많은 NSString을 사용하여 메모리 사용량을 줄이거 나 NSString을 어떻게 릴리스합니까?
- 가이 조작을 포함한다 (코어 데이터로 배열을 가져 줄의 X 번호 후 NSStrings
- 의 NSMutableArray를 전체로 파일을 줄 단위로 구문 분석하고 어떤 경우에는 새 NSString 만들기)
- [NSMutableArray removeAllObjects];
- 린스와 메모리가 각 사이클이 끝날 때까지 해제해야 것 같습니다 언뜻
를 반복합니다. 그러나 대용량 파일의 경우, 몇 가지 메모리 부족 경고가 표시되면 앱이 다운되는 것을 발견했습니다. 누출 도구를 실행하면 대부분의 메모리가 CFString 객체에 의해 사용 중이라는 것을 알 수 있습니다. 비록 NSString 객체와 관련이 있다고 생각합니다. (비록 모릅니다.)
가능하면 NSString이 재사용된다는 것을 알고 있습니다. 비록 그들이 세부 사항을 전혀 이해하지 못한다고해도, 그들은 기억이 관련되는 다른 대상들과 아주 똑같이 행동하지 않는다. NSString 객체가 사용하는 메모리를 어떻게 회수 할 수 있습니까?
의견을 보내 주셔서 감사합니다. 모두 똑같은 금액입니다. 내 autoreleased 개체에 대한 풀을 설립 및/또는 적절한 경우 초기화 메서드를 사용하지만 응용 프로그램은 여전히 루프에 여러 반복 충돌이 발생합니다. 이것은 나에게 이해가되지 않는다 : 각 루프 사이에 메모리 풀을 뽑아 내고 있기 때문에 메모리는 반복 사이에 해제되어야한다. 맞습니까? 참고로 누수 도구를 사용하여 프로그램에 메모리 누수가 없다는 것을 확인했으며, 모양을 유지하기 위해 코드 분석을 자주 수행합니다. 제안을 주셔서 감사합니다. – JoBu1324
나는 이제 더 자세한 정보를 얻었습니다. 적어도 메모리 중 일부는 해제됩니다. 코어 데이터 (-insertNewObjectForEntityForName : inManagedObjectContext)에 데이터를 삽입하는 코드를 실행할 때 메모리가 누적되는 것 같습니다. 나는 정기적으로 a-save 작업을 정기적으로 수행하므로 코어 데이터가 메모리 부족 상황을 처리 할 것이라고 생각했지만 코어 데이터가 메모리를 해제하지 않아도 문제를 일으킬 수 있습니까? – JoBu1324
이 조사에는 여러 가지 청어가있었습니다 만, 자동 누출 풀이 작동하지 않는 이유는 누수가 지속적으로 감지되지 않는 메모리 누수가 있었기 때문이었습니다. 전혀 감지되지 않았습니다 빌드 및 분석. – JoBu1324