Скорее всего, перед передачей методу вы сохранили одну из переданных строк (name
или ptyName
). Он поступает в локальную область со многими сохранениями и не может быть утилизирован при истощении пула памяти локальной области.
В остальном код технически корректен, но вы можете использовать несколько улучшений.
Не используйте alloc - init
, когда сработает метод автоматического освобождения. Итак, это:
if (ptyName != nil) {
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:ptyName ascending:NO];
NSArray *sortDescriptors = [NSArray arrayWithObject:sortDescriptor];
[request setSortDescriptors:sortDescriptors];
[sortDescriptor release];
}
... будет более кратко и безопасно написано:
if (ptyName != nil) {
NSSortDescriptor *sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:ptyName ascending:NO];
NSArray *sortDescriptors = [NSArray arrayWithObject:sortDescriptor];
[request setSortDescriptors:sortDescriptors];
}
Копирование возвращенного массива не требуется, как и авто-релиз. Итак, это:
return [[FetchResults copy] autorelease];}
... должно быть так:
return fetchResults;
}