多くの JSON 文字列を解析したい。コードは次のとおりです。
while(stations.count > 0) {
NSString*string = [[[NSString alloc] initWithString:[stations objectAtIndex:0]] retain];
NSMutableDictionary*dic = [[[NSMutableDictionary alloc]init]retain];
NSData*data = [[[NSData alloc] initWithData:[string dataUsingEncoding:NSUTF8StringEncoding]]retain];
NSMutableDictionary* pars = [[NSMutableDictionary alloc]initWithDictionary:[NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil]];
[dic setObject:[NSString stringWithString:[pars objectForKey:@"nm"]] forKey:@"nm"];
[dic setObject:[NSString stringWithString:[pars objectForKey:@"btr"]] forKey:@"btr"];
[dic setObject:[NSString stringWithString:[pars objectForKey:@"id"]] forKey:@"id"];
[dic setObject:[NSString stringWithString:[pars objectForKey:@"cntr"]] forKey:@"cntr"];
[dic setObject:[NSString stringWithString:[pars objectForKey:@"gnr"]] forKey:@"gnr"];
[pars release];
@try {
[parsedData addObject:[NSDictionary dictionaryWithDictionary:dic]];
}
@catch (NSException* exc) {
NSLog(@"%@, %@", exc.description, exc.reason);
}
[dic release];
[data release];
[string release];
[stations removeObjectAtIndex:0];
if (i%1000==0) {
NSLog(@"nnnn %i %i", parsedData.count, stations.count);
}
i++;
float k = count;
k = (i + 1)/k;
[self performSelectorOnMainThread:@selector(increaseProgress:) withObject:[NSNumber numberWithFloat:k] waitUntilDone:YES];
}
(通常は毎回ではありませんが)文字列を配列に追加すると、エラーが発生します:
exc_breakpoint (コード=exc_i386_bpt
と:
GuardMalloc [Radiocent new try-1820]: VM の割り当てに失敗しました 68752 バイト
GuardMalloc[Radiocent new try-1820]: 明示的にデバッガーにトラップ!!!
Stations 配列はかなり大きいです...約 60000 文字列です。