Этот блок совершенно не нужен и опасен:
static NSArray *sortDescriptors = nil;
if (!sortDescriptors)
sortDescriptors = [[NSArray alloc] initWithObject:[[[NSSortDescriptor alloc] initWithKey:@"text" ascending:NO] autorelease]];
[request setSortDescriptors:sortDescriptors];
Любой статический объект опасен для памяти, и вы используете его только в особых случаях.Зачем прибивать массив только локальной областью к определенному адресу / блоку?Все это можно заменить одной строкой:
[request setSortDescriptors:[NSArray arrayWithObject:[NSSortDescriptor sortWithKey:@"text" ascending:NO]]];
... и все готово.
Эта строка, вероятно, не нужна и может вызвать проблемы позже:
self.articulationsArray = [NSMutableArray arrayWithArray:fetchResults];
Зачем вам нужен изменяемый массив извлекаемых объектов?Вы не можете реально добавлять или удалять что-либо из массива напрямую, сохраняя целостность вашего графика без повторной загрузки.
Просто:
self.articulationsArray = fetchResults;
будет работать нормально в большинстве случаев.
Чем больше объектов вы создаете, тем больше шансов на утечку.Сохраняйте вещи максимально простыми.