Есть ли разница в использовании self.variable = 'some value' и только variable = 'some value' для переменных экземпляра - PullRequest
1 голос
/ 08 марта 2011

Допустим, у меня есть переменная экземпляра NSDate * date; и я делаю (например, в viewDidLoad):

date = [NSDate dateWithTimeIntervalSinceNow:0];

или

self.date = [NSDate dateWithTimeIntervalSinceNow:0];

Есть ли разница между этими двумя? И если есть, какой из них правильный и, возможно, почему:)

Спасибо за ответы Ладислав

Ответы [ 4 ]

4 голосов
/ 08 марта 2011

Да. self.date вызывает установщик свойства с именем date, и если вы указали что-то вроде retain в спецификации свойства или если вы предоставили собственные средства доступа, они будут вызваны.

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

4 голосов
/ 08 марта 2011

Да, есть разница. Первый просто присваивает значение переменной, в то время как другой присваивает свойство и, таким образом, аналогичен записи:

[self setDate:[NSDate dateWithTimeIntervalSinceNow:0]];

Например, если вы определили свое свойство как @property(retain) NSDate *date;, реализация по умолчанию (через @synthesize date) освободит старое значение и сохранит новое значение. Вы также можете предоставить пользовательскую реализацию setDate: и выполнить некоторые действия при назначении даты. Все это не произойдет, если вы просто назначите значение переменной.

1 голос
/ 08 марта 2011

Если вы используете date = [NSDate dateWithTimeIntervalSinceNow: 0]; здесь дата - автоматически выпущенный объект.

Но если вы используете self.date и его свойство сохраняется, это не объект с автоматическим освобождением, мы должны явно указать дату выпуска

1 голос
/ 08 марта 2011

Объявляя self.date = некоторое значение; вы на самом деле делаете следующие вещи

if (дата) [дата выпуска]; дата = [сохранить некоторое значение];

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