iPhone ivar соглашение о присвоении имен [дубликат]

Возможный дубликат:
Как делает подчеркивание перед переменной в работе класса цели-c какао?

Я заметил, что в большом количестве ссылочных материалов там, вижу, что много времени, переменные называют _variable в.h файле, затем являются @synthesize'd в.m файле как

@synthesize variable = _variable;

Почему это сделано? Что я пропускаю?

Спасибо!

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

4 ответа

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

Однако я очень предпочитаю не использовать префикс _ [11345556] _ и иметь два сильных причина:

1) Некоторые люди думают, что _ - хороший показатель «частного» Отказ Мой взять в том, что ни один класс локальной переменной не должен быть доступен без установки / Getter (свойство) и, таким образом, все они являются частными - учитывая, почему не назвать их в течение проще читать и использовать автозаполнение? Любые перекрытия в именах из параметров быстро выявлены компилятором и избегают более заботливого именования параметров (или внутренних переменных).

2) (даже лучшая причина) - если вы используете «Refactor» в XCode на внутреннем классе VAR, который называется, то же самое, что и свойство, используемое для доступа к нему, свойство и Synthesize оператора также будет переименоваться. Если вы используете Refactor на переменную класса, префиксную с помощью _ , имя свойства не будет изменено - просто синтезировать отображение на внутреннем имени. Я почти никогда не хочу, чтобы имя варьироваться от собственности на реальную переменную, к которой он предоставляет доступ. Только это заставляет меня никогда не хотеть использовать _ как префикс переменной, поскольку возможность смещения имени - это только самое полезное, что вы можете сделать, чтобы улучшить четкость кода.

21
ответ дан 29 November 2019 в 04:12
поделиться

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

Чтобы кодировать внешний к классу, нет никакой разницы, поскольку он использует свойство.

Для кода в реализации самого класса он может сделать его более понятно, когда используется IVAR, по сравнению с имуществом.

Например, скажем, у нас есть ивар / недвижимость для объекта NSNUMBER:

@interface MyClass : NSObject {
    NSNumber *num;
}
@property (nonatomic, retain) NSNumber *num;
- (void)doSomething;
@end

@implementation MyClass
@synthesize num;

- (void)doSomething {
    // set the property, num is properly retained
    self.num = [NSNumber numberWithInteger:1];

    // accidentally set the ivar, num is NOT retained
    num = [NSNumber numberWithInteger:2];
}
@end

и теперь используя другое имя для Ивара и свойства:

@interface MyClass : NSObject {
    NSNumber *i_num;
}
@property (nonatomic, retain) NSNumber *num;
- (void)doSomething;
@end

@implementation MyClass
@synthesize num = i_num;

- (void)doSomething {
    // set the property, num is properly retained
    self.num = [NSNumber numberWithInteger:1];

    // compiler error, there is no ivar named "num"
    num = [NSNumber numberWithInteger:2];

    // set the ivar, so it needs to be a retained object
    i_num = [[NSNumber alloc] initWithInteger:3];
}
@end
15
ответ дан 29 November 2019 в 04:12
поделиться

Иногда люди используют Mvarname (C ++), а в Obj-C стиль, кажется, _warkame. Одна проблема. упомянуть свое запутанное.

М, _, все, что помогает показать, какие свойства члена класса.

 -(void) set:(int)x
{
 x = x; // x is an ivar! heh
}

VS

 -(void) set:(int)x
{
 _x = x; // ahh I see!
}
4
ответ дан 29 November 2019 в 04:12
поделиться

Это чисто конвенция. Я полагаю, что это общие, потому что когда вы делаете метод Getter Call, как это:

[myObject variable]

Вы на самом деле вызываете метод, не доступа к переменной напрямую. _ Front позволяет понять, что вы говорите о переменной. Лично я нахожу этот синтаксис, раздражающий и отвлекающуюся. Я нахожу это ненужным, но вы правы, оно появляется здесь и там.

1
ответ дан 29 November 2019 в 04:12
поделиться