Есть метод для этого в классе Root. Без второго параметра это выборка внутреннего соединения
root.fetch("volumes")
Многие люди используют это для частных переменных, чтобы различать частные переменные и открытые переменные в объекте.
Это совершенно необязательный способ работы.
Как уже говорили, _someVar использовался, чтобы сказать, что переменная была закрытой. Это был простой вопрос соглашения и на самом деле не имеет значения.
Еще одно использование - поездка на обратном пути в C _function () представляла функцию, которая не была переносимой с платформы, а __function () представляла функцию, которая не была переносимой компилятором. Итак, в стандартной библиотеке C вы иногда видите переменную с _ или __ перед именем, это то, что представляют эти функции.
Иногда используется для обозначения частных переменных. В более общем смысле это просто означает, что эта переменная как-то отличается.
Может ли это быть ... (пробежка памяти) ...
Я смутно помню, как читал документ АЦП, объясняющий, что Apple резервирует использование переменных-членов с префиксом подчеркивания? и что сторонним разработчикам не рекомендуется использовать это соглашение, чтобы избежать коллизий?
| K <
Обычно это означает, что разработчик не должен напрямую касаться переменной. На самом деле это не является обязательным требованием, но это хорошая практика, если вы не можете избежать использования публичной переменной в классе, с которым вы не хотите путаться.
То, что вы видите, - это использование подчеркивания для различения переменных экземпляра и свойств. Итак, объявление класса может быть:
@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
.
Я использую символы подчеркивания для обозначения того, что переменная является членом, аналогично префиксу «m» в венгерской системе обозначений (которую я полностью презираю, но это уже другая история). Конечно, в наши дни у вас есть редакторы с цветовой кодировкой, но я считаю, что префикс заставляет вас думать о том, что переменная является членом / экземпляром один до того, как вы ее напечатаете, а не только когда-нибудь позже, когда она получит цветовую кодировку от вашего редактора.