В чем разница в определении переменной в интерфейсе файла.

StackOverflow https://stackoverflow.com/questions/4643692

Вопрос

Я определяю переменную в методе интерфейса файла .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 
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top