Когда Вы делаете подчеркивание перед переменной экземпляра? [дубликат]

Есть метод для этого в классе Root. Без второго параметра это выборка внутреннего соединения

root.fetch("volumes")

30
задан Community 23 May 2017 в 12:24
поделиться

7 ответов

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

Это совершенно необязательный способ работы.

34
ответ дан 27 November 2019 в 23:20
поделиться

Как уже говорили, _someVar использовался, чтобы сказать, что переменная была закрытой. Это был простой вопрос соглашения и на самом деле не имеет значения.

Еще одно использование - поездка на обратном пути в C _function () представляла функцию, которая не была переносимой с платформы, а __function () представляла функцию, которая не была переносимой компилятором. Итак, в стандартной библиотеке C вы иногда видите переменную с _ или __ перед именем, это то, что представляют эти функции.

8
ответ дан 27 November 2019 в 23:20
поделиться

Иногда используется для обозначения частных переменных. В более общем смысле это просто означает, что эта переменная как-то отличается.

2
ответ дан 27 November 2019 в 23:20
поделиться

Может ли это быть ... (пробежка памяти) ...

Я смутно помню, как читал документ АЦП, объясняющий, что Apple резервирует использование переменных-членов с префиксом подчеркивания? и что сторонним разработчикам не рекомендуется использовать это соглашение, чтобы избежать коллизий?

| K <

2
ответ дан 27 November 2019 в 23:20
поделиться

Обычно это означает, что разработчик не должен напрямую касаться переменной. На самом деле это не является обязательным требованием, но это хорошая практика, если вы не можете избежать использования публичной переменной в классе, с которым вы не хотите путаться.

1
ответ дан 27 November 2019 в 23:20
поделиться

То, что вы видите, - это использование подчеркивания для различения переменных экземпляра и свойств. Итак, объявление класса может быть:

@interface Foo {
  NSString* _label;
  ....
}

@property (nonatomic, retain) NSString* label; // notice: no underline

Затем в файле реализации у вас будет:

@synthesize label=_label; // the property is matched with the ivar

Теперь, когда вы внутри реализации, если вы хотите получить доступ к переменной экземпляра напрямую, вы можете просто использовать _label , но чтобы Пройдя через методы доступа к свойствам (которые заботятся о сохранении / выпуске и кучу других задач бухгалтерского учета), вы должны использовать self.label . С внешней стороны вы всегда можете использовать свойство {object} .label .

Другой способ - обойтись без подчеркивания и просто использовать:

NSString* label;
@property (nonatomic, retain) NSString* label;
...
@synthesize label;

Он работает так же, но тогда это может запутать кого-то, читая код и пытаясь отследить метку против self.label .

28
ответ дан 27 November 2019 в 23:20
поделиться

Я использую символы подчеркивания для обозначения того, что переменная является членом, аналогично префиксу «m» в венгерской системе обозначений (которую я полностью презираю, но это уже другая история). Конечно, в наши дни у вас есть редакторы с цветовой кодировкой, но я считаю, что префикс заставляет вас думать о том, что переменная является членом / экземпляром один до того, как вы ее напечатаете, а не только когда-нибудь позже, когда она получит цветовую кодировку от вашего редактора.

2
ответ дан 27 November 2019 в 23:20
поделиться