я должен присвоить = _variable свойству UIIButton или UILabel? - PullRequest
3 голосов
/ 27 января 2012

привет, нубский вопрос здесь.

во время учебы мне неоднократно давали указание всегда указывать переменную = _propertyName при @ синтезировании свойства @

так, например, для

@property (nonatomic, strong) NSTimer *myTimer;

Я бы сделал

@synthesize myTimer = _myTimer;

Теперь мой вопрос. это нужно делать и для свойств IB? такие как

@property (nonatomic, strong) IBOutlet UILabel *myLabel;
@property (nonatomic, strong) IBOutlet UIButton *myButton;

мне просто сделать здесь:

@synthesize myLabel;
@synthesize myButton;

или

@synthesize myLabel=  _myLabel;
@synthesize myButton = _myButton;

Теперь я понимаю, почему это полезно для чего-то вроде NSArray, или NSString или BOOL, где вы на самом деле храните некоторые значения, но я не уверен, как / если эта логика применяется к UIButtons, UILabels и подобным. Спасибо за любые указатели (нет пут предназначен)

Ответы [ 4 ]

2 голосов
/ 27 января 2012

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

@synthesize myTime = _myTime;

И вы находитесь в области действия экземпляра метода класса, например, -(void)setTime:(id)myTime;, есть разница между вызовами,

self.myTime = newTime;

И

myTime = newTime;

Становится ясно, что первый изменяет переменную экземпляра вашего объекта, а второй переназначает локальную переменную myTime, переданную в качестве аргумента методу setTime:, что обычно не требуется делать. Однако, если вы синтезировали свою переменную экземпляра следующим образом,

@syntehsize myTime;

Немного более запутанно, что произойдет с этим заданием,

myTime = newTime;

Это фактически переназначает локальную переменную и может не соответствовать тому, что вы намеревались. Поэтому, называя ваши переменные, хорошо придерживаться соглашений и избегать путаницы. Вот почему я предпочитаю назначать подчеркивание и всегда устанавливать переменные экземпляра, вызывая их присоединенными к self.

1 голос
/ 27 января 2012

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

0 голосов
/ 27 января 2012

На мой взгляд, "_var" служит для лучшей дифференциации между геттером / сеттером и его фактической связанной переменной.

если

@Synthesize myTimer = _myTimer;

занято. вам будет напоминаться каждый раз, используете ли вы setter / getter или напрямую обращаетесь к переменной.

например. если используется @Synthesize, то

self.myTimer = anotherTimer;

будет таким же, как

[self setMyTimer(anotherTimer)];

тем

_myTimer = anotherTimer;

просто присваивает переменную;

Да, это условно, но если вы хотите провести различие между вызовом метода установки / получения и прямым доступом к переменной, следует использовать "_var". это не так, это действительно не имеет значения.

0 голосов
/ 27 января 2012

во время учебы меня неоднократно инструктировали всегда указывать переменную = _propertyName при @ синтезировании свойства @

, это просто вопрос предпочтенийнекоторые люди предпочитают @synthesize myTimer;, некоторые люди имеют другие предпочтения…

теперь мой вопрос.это должно быть сделано также для свойств IB?

Вы должны синтезировать или определить методы в некоторой форме.Помимо этого, просто выберите одно соглашение и придерживайтесь его!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...