Почему Xcode позволяет создавать дубликаты категории Objective-C? - PullRequest
0 голосов
/ 30 июня 2019

Xcode не позволяет создавать дубликаты файлов классов. Мне любопытно, почему он позволяет создавать дубликаты файлов категорий в разных папках.

например: Папка --- NSObject + Test Папка B --- NSObject + Test

Проект может работать нормально.

Ответы [ 2 ]

1 голос
/ 30 июня 2019

Xcode и Objective-C позволяют создавать дубликаты файлов классов.То, что он не позволяет вам делать, это создавать дубликаты классов .В Objective-C традиционно называют файл с тем же именем, что и у класса, но это не универсально и не принудительно.

Я думаю, вы задаете вопрос, почему Objective-C позволяетнесколько категорий с одинаковым именем (независимо от того, в каком файле они находятся).Причина в том, что Objective-C на самом деле не особо волнует, как называется категория.Изначально категории были способом организации больших классов в несколько файлов (именно поэтому они называются «категориями», а не «расширениями»).В конце концов они стали использоваться для добавления новых методов в существующие классы.Ни на одном этапе компилятор действительно не очень беспокоился об именах категорий (часть в скобках).Они обычно рассматриваются как комментарии.

Я бы не стал предполагать, что был определенный момент, когда разработчики языка решили, что «должно быть законно иметь несколько категорий с одним и тем же именем».Там просто никогда не проверяли и не предотвращали.

Более интересное и важное столкновение состоит в том, что две категории могут добавлять одно и то же метод имя.Это не предотвращается компилятором, но на самом деле является серьезной проблемой.Не определено, какой метод будет выполняться, и компилятор не скажет вам, что вы совершили эту ошибку.Вот почему важно использовать префикс имен методов категорий, чтобы избежать конфликтов.Для согласованности рекомендуется также добавлять префиксы к именам категорий.

0 голосов
/ 30 июня 2019

Почему компилятор должен заботиться об имени файла ? Никогда не слышал, чтобы компилятор делал такие вещи.

И могут быть причины, я. е. если в папке A соответственно Папка B - это разные версии или конфигурации программного обеспечения.

...