В чем разница в определении переменной в интерфейсе файла.
-
09-10-2019 - |
Вопрос
Я определяю переменную в методе интерфейса файла .h Как это ...
@interface ......{
int a;
}
Затем я использую его в файле .m, он работает нормально ....
Также я изменил код как
@interface ......{
int a;
}
@property(nonatomic) int a;
в файле .h и в файле .m я устанавливаю значение int как
@synthesize a;
Теперь также работает нормально ...
Что отличается между обоими случаями?
Решение
Объявив свой собственность «A», вы позволяете хранить в вашем классе, и вы можете получить доступ к нему из своего класса - но Только в вашем классе. Если вы хотите, чтобы это было недвижимость, доступное для других объектов (общественное свойство), то вам нужны методы Gotter и Setter.
Объявляя это как @property
в твоем .h
и использовать @synthesize
в твоем .m
, Вы автоматически создаете два метода:
[myObject a]; // your getter
[myObject setA:50]; // your setter
Одним из них следует помнить, так это то, что часто очень хорошая идея использовать сиптизированные свойства даже в вашем классе, потому что они позаботятся о вашем управлении памятью. Например, когда вы флага @property
так как retain
:
objectProperty = anObject; // just accessing locally, no memory management
self.objectProperty = anObject; // [anObject retain] will be called
self.objectProperty = nil; // [anObject release] will be called
Другие советы
В первом случае вы используете поле, с прямым доступом к нему. Во втором случае вы определяете объективную собственность C, с доступами.
Если вы определяете и синтезировать свойство, то вы также можете получить доступ к значению, используя int value = self.a; self.a = newValue;
. Отказ Это также делает переменную доступ к другим объектам. Без собственности вы не можете использовать self.
Чтобы добраться до переменной, и для других объектов нет автоматического способа добраться до.
Когда вы определяете и синтезируете свойство, вы говорите, компилятору генерируют как методы Ивара, так и доступа (- (int) a; и - (void) seta: (int) a_;) для него. Эти методы можно назвать явно или топливо с помощью точечного синтаксиса:
self.a = num; // [self setA:num] gets called