Я предполагаю, что вы работаете в среде с подсчетом ссылок, то есть сборка мусора отключена.
Сначала попробуйте изменить первую строку внутри цикла на:
NSString * foo = [NSString stringWithString:[[newsStories objectAtIndex:arc4random() % [newsStories count]] objectForKey:@"title"]];
Использование метода класса stringWithString:
вместо alloc
и initWithString:
дает автоматически освобожденную строку NSString вместо строки с retain count = 1. Это должно устранить утечку памяти, упомянутую в комментариях и / или других ответах.
Тем не менее, каждая операция foo =
внутри цикла создает еще одну автоматически освобожденную строку NSString, поэтому в каждой итерации цикла вы создаете 3 (вашу версию) или 4 (если вы сделали вышеупомянутое изменение) строки, которые автоматически освобождаются, наращивать по итерациям и создавать проблемы. Из-за этого может быть полезно создать и освободить пул автоматического выпуска в вашем цикле:
for (int a = 0; a <= 20; a++) {
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
NSString * foo = [NSString stringWithString:[[newsStories objectAtIndex:arc4random() % [newsStories count]] objectForKey:@"title"]];
foo = [foo stringByReplacingOccurrencesOfString:@"’" withString:@""];
foo = [[foo componentsSeparatedByCharactersInSet:[[NSCharacterSet letterCharacterSet] invertedSet]] componentsJoinedByString:@" "];
foo = [foo stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
textView.text = [textView.text stringByAppendingString:[NSString stringWithFormat:@"%@ ", foo]];
[pool release];
}