Ведущие подчеркивания в сгенерированном коде - PullRequest
2 голосов
/ 07 декабря 2011

При чтении сгенерированного Apple шаблона кода, а также в документации, я вижу _ (подчеркивание) и __ (двойное подчеркивание). Примером может служить код, сгенерированный при проверке опции основных данных:

@synthesize window = _window;
@synthesize managedObjectContext = __managedObjectContext;
@synthesize managedObjectModel = __managedObjectModel;
@synthesize persistentStoreCoordinator = __persistentStoreCoordinator;

Что это значит? Я понимаю, _ относится к закрытой частной переменной. Что означает __?

Ответы [ 2 ]

1 голос
/ 07 декабря 2011

На первый взгляд это часто сбивает с толку, когда вы используете методы получения / установки и когда вы обращаетесь к ивуру напрямую.

Альтернативой является имя ивара, отличное от свойства. Обычный подход заключается в использовании подчеркивания для префикса имен ivars, например так:

@interface RootViewController : UITableViewController 
{
    NSDate *_timestamp;
}
@property (nonatomic, retain) NSDate *timestamp;

Чтобы подключить свойство (имя которого не изменилось), оператор sythensize получает дополнительную опцию:

@implementation RootViewController

@synthesize timestamp = _timestamp;

По сути, если программист ObjectiveC объявляет ivars в соответствии с этим соглашением (и они должны это делать) и использует базовый синтаксис @synthesize _window;, тогда использование свойства становится несколько уродливым: classInstance._window = myWindow или [classInstance set_window:myWindow]. Использование синтаксиса @synthesize window=_window; позволяет программисту Obj-C использовать популярный стандарт программирования (предшествующий ivars с _), одновременно имея средства доступа к свойствам, которые используют стандарты Apple classInstance.window = myWindow и [classInstance setWindow:myWindow].

0 голосов
/ 07 декабря 2011

Документация Apple предлагает НЕ использовать одиночные подчеркивания в вашем проекте (как это зарезервировано самим яблоком: самый известный пример - _cmd).Но подчеркивание - это традиционный модификатор c-стиля для закрытости идентификатора, поэтому двойное подчеркивание - это решение для создания закрытого идентификатора для вашей переменной.

http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/CodingGuidelines/Articles/NamingMethods.html

Имена большинства закрытых методовв платформах Какао есть префикс подчеркивания (например, _fooData), чтобы пометить их как закрытые.Из этого факта следуют две рекомендации.

Don’t use the underscore character as a prefix for your private methods. Apple reserves this convention.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...