アプリをロードするとき、約 10 ~ 15 個の JSON ファイルをダウンロードし、アプリのドキュメント ディレクトリに保存します。数 KB から 30 MB の範囲のものもあります。
それが完了したら、ドキュメント ディレクトリからそれぞれを取得し、NSDictionary に変換して、NSManagedObjects に解析する必要があります。
しかし、以下のコードでそれを行うと、アプリがクラッシュするまで、各 JSON をメモリに保持しているように見えます。Instruments の「Leaks」ツールには何も表示されませんが、私のアプリは大量のメモリを保持しています。
JSON ファイルを取得するコードは次のとおりです。
更新しました
- (void)parseDownloadedFiles
{
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *docDir = [paths objectAtIndex:0];
docDir = [docDir stringByAppendingString:@"/jsons"];
NSFileManager *fileManager = [NSFileManager defaultManager];
NSError *error;
NSArray *files = [fileManager contentsOfDirectoryAtPath:docDir error:&error];
if (files == nil) {
// error...
}
for (NSString *file in files)
{
NSString *fileName = [NSString stringWithFormat:@"%@/jsons/%@",
docDir, file];
NSString *content = [[NSString alloc] initWithContentsOfFile:fileName
usedEncoding:nil
error:nil];
NSDictionary *JSON =
[NSJSONSerialization JSONObjectWithData: [content dataUsingEncoding:NSUTF8StringEncoding]
options: NSJSONReadingMutableContainers
error: &error];
...create my NSManagedObjects & store
JSON = nil;
}
}
--
私の割り当てを見てみましょう:
--
その最初の Malloc 44.79 を掘り下げると、次の問題行が表示されます。
-- これは、上記のコードの for ループ内にあります。
その NSLog は本当にそのような問題を引き起こしますか?