2016-10-10 5 views
0

Есть три новых частных класса добавляемого IOS 10Почему добавить "__NSSingleXXXI" частный класс в ИО 10

  • __NSSingleObjectArrayI
  • __NSSingleObjectSetI
  • __NSSingleEntryDictionaryI

Когда контейнер инициализации с одного объекта , кластер контейнера будет использовать эти три новых класса.

В iOS 9 также добавлены '__NSArray0' и '__NSDictionary0'.

Я не знаю причины добавления этих специальных частных классов. Может кто-нибудь сказать мне, почему?

+0

Частные классы - это классы, предназначенные только для внутреннего использования Apple. Пользователь/мы не можем его использовать (если вы не настроите или не сделаете jailbreak iphone). Итак, теперь добавление новых частных классов или их удаление основано на их внутренней потребности, только программист из apple может только сказать, почему они добавили. –

ответ

5

Это скорее всего оптимизация. Например, __NSSingleObjectSetI не нужно беспокоиться о фактической хэш-таблице, потому что есть только один объект, о котором можно беспокоиться. Такие методы, как containsObject:, не нуждаются в том, чтобы зацикливаться на чем-либо или что-либо искать, он может просто сравнить аргумент с единственным объектом, который представляет собой набор/массив/словарь.

Аналогичным образом, __NSArray0 (при условии, что он используется для пустых массивов) может иметь методы, подобные arrayByAddingObjectsFromArray:, просто отправьте copy в аргумент и верните его. Небольшая оптимизация, но тем не менее оптимизация.

Вы не должны использовать эти классы напрямую (так как они являются частными и детализация реализации), инфраструктура будет использовать эти классы автоматически. Так как это является деталь реализации, я не могу быть уверен в истинных целях этих частных классов, я только предполагаю.