Приносит ли вызов 'count' ко многим ошибкам отношения CoreData все объекты в коллекции в память? - PullRequest
6 голосов
/ 06 августа 2011

Скажем, у меня есть объект «Сотрудник» с множеством «отделов» для другого объекта «Отдел». Если у меня есть экземпляр объекта Employee, а коллекция отделов в настоящее время является ошибкой, каков наиболее эффективный для памяти способ получения количества отделов?

Два очевидных варианта:

1) звонит [myEmployee.departments count];

2) Создание запроса fetchRequest для возврата только объектов Department, чьи соответствующие отношения 'employee' указывают на мой объект employee, и затем вызова countForFetchRequest:

Помимо использования памяти, один из этих методов был бы неотъемлемо быстрее, чем другой?

Ответы [ 2 ]

0 голосов
/ 10 ноября 2017

Во-первых: когда отношения называются, объект загружается как «ошибка», поэтому производительность так хороша.

Второе: если вы используете метод countForFetchRequest, запрос будет:

NSFetchRequest *f = Departament.fetchRequest;

f.predicate = [NSPredicate predicateWithFormat:@"ANY employees = %@", employe.objectID];

поэтому CoreData должна проверять каждый отдел, чтобы искать сотрудников. На практике это медленнее.

  • В вашем случае я бы использовал первый вариант.
  • Ситуация была бы другой, если предикату нужны свойства объектов, поэтому для первого варианта нужны целые объекты без ошибок. В этом случае я рекомендую использовать countForFetchRequest, но лучшим вариантом является сравнение в конкретном случае.
0 голосов
/ 08 мая 2012

Отношения не извлекаются, если у вас нет отношенийKeyPathsForPrefetching.

Тем не менее, мой лучший совет для вас - всегда внедрять ваше решение наиболее простым способом, а ТОГДА решает проблемы с производительностью позже. Люди, как известно, плохо предсказывают проблемы с производительностью.

Одним из инструментов, который очень прост в использовании, является Instruments, который включен в Xcode.

Вы можете легко запустить тест с использованием обоих подходов и сравнить цифры, а не просто принять мнение какого-то незнакомца о SO.

...