Это не определение интерфейса 3 раза - есть только один интерфейс.
вы видите категории, которые добавляют методы к классу
Существует базовый интерфейс, который определяетатрибуты и некоторые методы - есть только один из этих муравьев, он определяет, как объект хранится в памяти, и является единственным, который необходим.
Objective C ищет методы во время выполнения.Эти методы не нужно искать во время компиляции и, следовательно, их не нужно объявлять в заголовках / интерфейсах и т. Д. Если они не объявлены и вы вызываете их из кода, вы получите предупреждения о времени компиляции.
Inв этом случае одна категория с пустым именем используется для частных функций.Обычно я помещаю этот интерфейс только в файл .m класса, поэтому он не виден другому коду, как не в заголовке.
Вторая категория - добавить методы, чтобы SessionManager соответствовал протоколу GKVoiceChatClient.Обычной причиной для этого является группировка кода, охватывающего определенное поведение.
Другая причина использования категорий - это добавление методов в существующий класс, такой как NSString, - вы можете создавать свои собственные методы добавления категорий без разделения на классы.как и во многих других языках ОО, включая Java и C ++