whileループのあるメソッドを呼び出すスレッドを切り離します。としてマークを付けてもautoreleasepool
、whileループはしばらく続く可能性があるため、オブジェクトを手動で解放します。
問題は、しばらくすると、メモリの問題が原因でアプリがクラッシュすることです。Instrumentsを見ると、NSStringの巨大な山が割り当てられており、グラフに天国への階段が作成されていることがわかります。何をリリースできませんでしたか?
while (keepGettingScores)
{
NSString *jsonString = [[NSString alloc] initWithContentsOfURL:url encoding:NSUTF8StringEncoding error:nil];
NSDictionary *json = [jsonString JSONValue];
[jsonString release];
NSMutableArray *scores = [[NSMutableArray alloc] init];
[scores setArray:(NSMutableArray*)[[jsonString JSONValue] objectForKey:@"scores"]];
NSSortDescriptor *sorter = [[NSSortDescriptor alloc] initWithKey:@"totalScore" ascending:NO];
[scores sortUsingDescriptors:[NSArray arrayWithObject:sorter]];
[sorter release];
[self performSelectorOnMainThread:@selector(updatePlayerTable:) withObject:scores waitUntilDone:NO];
[scores release];
[NSThread sleepForTimeInterval:1.0];
}