Есть ли разница между NSCountResultType и countForFetchRequest: ошибка: с точки зрения производительности?

Я использовал NSCountResultType для подсчета объектов в контексте CoreData. Некоторое время назад я столкнулся с countForFetchRequest:error:, который, похоже, делает то же самое с другим (более читаемым) синтаксисом.

Есть ли разница между этими двумя с точки зрения производительности, управления памятью или другими аспектами, несмотря на синтаксис?

Ответ 1

Кажется, нет никакой разницы (только один возвращает NSUInteger, а другой возвращает NSArray, содержащий NSNumber).

Установка параметра запуска

-com.apple.CoreData.SQLDebug 3

показывает, что оба

NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Event"];
NSUInteger count = [context countForFetchRequest:request error:NULL];

и

NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Event"];
[request setResultType:NSCountResultType];
NSArray *result = [context executeFetchRequest:request error:NULL];

выполнить точно такой же оператор SQLite

SELECT COUNT( DISTINCT t0.Z_PK) FROM ZEVENT t0