2009-12-01 6 views
3

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

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

@class NSString; 

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

Мой вопрос,

Что причина давая подчеркнуть & ЬурейиЕ их снова с правильными один?

ответ

7

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

2

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

1

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

+0

За исключением того, что эта форма в вопросе не непрозрачна. Непрозрачность обычно достигается с помощью указателей void void typedef'd и сохранения фактического определения структуры из публичных заголовков. – Benno

+0

Возможно, вы правы, почему-то я предположил, что он комбинировал код из публичного/частного, так как он говорил о частных API. – phoebus

1

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

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

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

Смежные вопросы