2015-08-27 2 views
1

я прочитал, что из этой книги enter image description hereЯвляется ли это, что «каждое свойство имеет опорную переменную» true?

, но я также читал, что в некоторых случаях имущество не будет создавать переменную экземпляра автоматически. enter image description here

Итак, если это так, то где имущество хранит его значение?

+1

Это зависит от вашей реализации. Если вам действительно нужна переменная экземпляра, вы можете ее создать. Но свойство может быть получено из других переменных и вычисляется только тогда, когда его просят - в этом случае его не нужно хранить где-либо. – michaelrccurtis

ответ

3

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

Допустимые исключения то, что вторые претензии приговор. Это правда.


Очевидно, что второе предложение является говоря о auto-sythensis. Вы можете, конечно, генерировать var для всего с @synthezise или сообщать компилятору не с @dynamic

1

Второй абзац, который вы отправили, является истинным. Переменная экземпляра будет автоматически синтезироваться, только если компилятор отвечает, по крайней мере, на методы getter/setter. Если вы решите переопределить оба метода и все еще хотите е, чтобы быть переменной экземпляра, который идет с собственностью, созданной, вам нужно вручную синтезировать, например:

@synthesize variableName; 

Обратите внимание, что если вы используете пункт @synthesize как есть (без «=»), переменная экземпляра, которая будет создана, будет иметь то же имя (в данном случае variableName). Если вы хотите, чтобы дать переменную экземпляра имя, отличное от недвижимости, которую создали, вы можете добавить любое имя, которое вы хотите, как это:

@synthesize variableName = someOtherName; 

В этом случае имя свойства будет variableName и имя переменной экземпляра будет someOtherName. Соглашение состоит в том, чтобы назвать переменную экземпляра тем же именем, что и свойство, только с подчеркиванием в начале (в данном случае _variableName). Это также будет имя переменной, если вы разрешите компилятору создавать переменную для вас, но нести ответственность за хотя бы один из методов getter/setter.

+0

Вам не нужно использовать '@synthesize variableName;'. Это один из вариантов. Вы также можете просто объявить свою собственную переменную экземпляра и использовать ее по мере необходимости. – rmaddy

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