Я думаю, что это просто тонна работы для каждой ячейки таблицы (никогда не доверяйте симулятору в производительности, это ничего не значит в отношении того, как все будет вести себя на устройстве). Вы должны попробовать и использовать инструменты, чтобы точно определить, что занимает время, но если бы мне пришлось взглянуть на это, я бы сказал:
NSDictionary *mainDictionary = [[NSDictionary alloc]init];
Просто для начала это а) кажется бессмысленным из-за этой следующей строки и б) похоже, что вы это просачиваете.
mainDictionary = [NSDictionary dictionaryWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"animals" ofType:@"txt"]];
Загрузка этого файла каждый раз не может быть звездной для производительности, вы должны приводить эти данные один раз, чтобы понравиться вашему контроллеру представления, а не каждый раз, когда вы заполняете ячейку.
NSEnumerator *enumerator = [mainDictionary objectEnumerator];
id returnValue;
while ((returnValue = [enumerator nextObject]))
{
if([cell.nameLabel.text isEqualToString:[returnValue valueForKey:@"name"]] )
{
Весь этот кусок, я бы переделал. Это должно быть тупым, используя NSDictionary неправильно. Словарь содержит ключ и значение, вам не нужно самостоятельно сканировать все это с помощью перечислителя, чтобы найти требуемое значение путем сравнения строк, вы должны использовать что-то вроде
[mainDictonary objectForKey:@"thingYouWant"];
выполнение того, что вы сказали, похоже на 60 полных перечислений словаря, и сравнение строк не может быть полезным для производительности таблицы и не является необходимым.
Это будет то, что я работаю, сначала проверяю производительность, а затем переделываю по мере необходимости, я готов поспорить, что проблемы с производительностью содержатся в этих блоках.