2013-02-14 3 views
0

Проверка на работоспособность. С учетом этого:Точечная нотация - свойство/способ

@property (readwrite, nonatomic) NSDate *start; 

Тогда эти две строки кода не идентичны?

Версия 1:

self.start.description 

Вариант 2:

[self.start description] 

т.е. start.description вызывает description метод на start объекта.

ответ

1

Да. Результат будет одинаковым в обоих случаях; свойства (в основном) только сахара вокруг методов доступа, написанных в обычном стиле какао.

Я говорю «в основном», потому что есть некоторые незначительные внутренние различия. Свойства добавляются как метаданные в описание времени выполнения класса Objective C. Вы можете через некоторое размышление узнать список свойств, которые были объявлены как таковые. Этот список отличается от списка методов, названных в стиле getter/seters.

2

Да, они идентичны, и поэтому [[self start] description]

2

В основном да.

Вокруг дома есть сеттер и автозаправочный автопогрузчик. Если вы используете инструкцию @syncronize, то у вас есть возможность влиять на то, как названы сеттер, получатель и свойство. Если вы автосинхронизируете имя свойства _start. Имя получателя запускается, а имя параметра setStart.

Так

something = self.start 

фактически вызывает добытчика и

self.start = something 

называет сеттера. Эквиваленты являются:

something = [self start]; 
[self setStart:something]; 

Если вы когда-либо хотите получить доступ к переменной экземпляра непосредственно затем сделать так:

_start = something; 
something = _start; 

В том случае, если вы просто использовать @synthesize start; тогда эквивалент будет:

start = something; 
something = start; 

Это может быть путаным, но start фактически обращается к переменной экземпляра, в то время как self.start использует сеттер/геттер. Это различие имеет огромное значение, когда вы не ARC. В зависимости от параметров свойств (например, назначение, копирование, сохранение, ...) автоматически созданный getter и setter выполняет некоторое управление памятью, пока управление памятью остается вам, когда вы работаете непосредственно с переменной экземпляра.

+0

Благодарим за редактирование. Моя глупая ошибка. :) –

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