В чем причина предоставления Underscore в приватных заголовочных файлах Apple? - PullRequest
3 голосов
/ 02 декабря 2009

Я видел много .h (частных API) яблок. Большинство переменных / структур / перечислений / классов имеют в качестве префикса _.

#import <Foundation/NSValue.h>
#import <Foundation/NSObjCRuntime.h>

@class NSString;

typedef struct _NSRange {
    NSUInteger location;
    NSUInteger length;
} NSRange;

Мой вопрос,

Какая причина заключается в том, чтобы дать подчеркивание и снова ввести его с правильным?

Ответы [ 4 ]

7 голосов
/ 02 декабря 2009

Objective-C имеет глобально открытое пространство имен. Важно, чтобы все имена были уникальными. В дополнение к причинам, указанным ранее, Apple оставляет за собой все имена подчеркивания для себя. Это поможет предотвратить случайные конфликты имен.

2 голосов
/ 02 декабря 2009

Обычно он используется как признак того, что рассматриваемая сущность является частной и / или внутренней и не должна использоваться непосредственно в вашем коде. Я думаю, что в более старых версиях C вы не могли объявить анонимную структуру, поэтому вам нужно было указать имя "filler".

1 голос
/ 02 декабря 2009

Для объявления структур стиль объявления typedef struct _name {...} name восходит ко временам GCC 2.0 или около того, когда, как было упомянуто выше, у вас не может быть анонимной структуры.

Для имен иваров единственным символом подчеркивания является соглашение Apple о внутреннем кодировании, и официально компания Apple резервирует все имена, начинающиеся с одинарных символов подчеркивания. Если Apple называет все свои ивары таким образом, то вы не столкнетесь ни с одним из их имен, если не сделаете этого.

К сожалению, многие примеры проектов кода были опубликованы на веб-сайте Apple для разработчиков без прохождения кода и удаления начальных подчеркиваний в именах ivar. Это происходит по двум причинам, главная из которых заключается в том, что разработчики, работающие внутри Apple, имеют привычку называть свои переменные таким образом, а другая причина состоит в том, что люди, рассматривающие проекты примеров кода, на самом деле мало заботятся о применении стандартного кодирования. стиль.

1 голос
/ 02 декабря 2009

Я считаю, что это для того, чтобы создать непрозрачный тип . Это ограничивает доступ клиентов типа к внутренним деталям без использования предоставленного интерфейса. Затем вы можете использовать структуру через непрозрачный указатель и можете объявлять массивы, переменные и т. Д., Не беспокоясь о внутренней реализации, гарантируя, что программное обеспечение не нужно будет перекомпилировать, если Apple решит изменить код за такими типами.

...