【发布时间】:2011-01-07 12:08:21
【问题描述】:
我分离了一个调用我的方法的线程,它有一个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];
}
【问题讨论】:
-
我认为一切看起来都很好,是什么让您认为问题出在这个循环中?
-
我已经逐行注释了,它必须在这个循环内泄漏。这不是 @selector-call,因为它是一个空方法...问题是 [NSString jsonVALUE] 是否可以使用,因为我在 API 中找不到任何文档...
标签: ios memory-management instruments