2012-01-27 2 views
3

привет здесь вопрос нет.Должен ли я присваивать a = _variable свойству UIIButton или UILabel?

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

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

@property (nonatomic, strong) NSTimer *myTimer; 

Я бы

@synthesize myTimer = _myTimer; 

сейчас мой вопрос. это нужно сделать для свойств ИБ? , такие как

@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 и тому подобному. Спасибо вам за любые указатели (не положить предназначенный)

+0

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

ответ

2

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

@synthesize myTime = _myTime; 

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

self.myTime = newTime; 

и

myTime = newTime; 

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

@syntehsize myTime; 

Это немного сбивает с толку то, что случилось бы с этим заданием,

myTime = newTime; 

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

+0

классный, спасибо за отличное объяснение. так что вы делаете = _variable для @ synhesize-es? даже для UIButtons, UILabels и других IBOutlets? – TrekOnTV2017

+0

Да, для всех переменных экземпляра. – john

+0

Я сделаю то же самое. Еще раз спасибо. – TrekOnTV2017

0

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

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

сейчас мой вопрос. это нужно сделать для свойств ИБ?

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

1

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

+0

Я вижу. Поэтому я решаю, будет ли объект храниться в объекте или _объектной переменной. Итак, нет никакой фактической разницы в двух переменных (кроме имени)? – TrekOnTV2017

+0

Вы только изменяете имя доступа к этой кнопке. –

+0

Я вижу. Так что это действительно только стиль кодирования. Я получаю это сейчас. – TrekOnTV2017

0

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

если

@Synthesize myTimer = _myTimer; 

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

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

self.myTimer = anotherTimer; 

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

[self setMyTimer(anotherTimer)]; 

то время

_myTimer = anotherTimer; 

является лишь присваивающим переменным;

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

Смежные вопросы