2015-09-29 3 views
-2

Я недавно натолкнулся на это форматирование для .h header file. Может кто-нибудь объяснить мне, почему это делается таким образом и что это значит? В частности, я смущен тем, что находится в первом наборе фигурных скобок/повторении? Как это отличается от того, если я должен удалить брекеты и все между ними?Что означает этот заголовок в файле .h?

@interface ACustomView : UIView 
{ 
    float chartWidth, chartHeight; 
} 
@property (nonatomic, readwrite) float chartWidth, chartHeight; 
@end 
+0

Свойства могут быть доступны и из других классов. Остальные не могут получить доступ к другим классам –

+0

, которые лучше всего объясняются здесь: https://www.bignerdranch.com/blog/should-i-use-a-property-or-an-instance-variable/ –

+0

Это похоже на старый объект Objective- C. Компилятор не автосинтезирул переменные экземпляра, и они должны были быть объявлены в интерфейсе. – Willeke

ответ

1

Как это отличается от того, если бы я, чтобы удалить скобки и все между ними?

@property, само по себе, это просто метод декларации (или, в вашем случае два метода декларации, геттер и сеттер). Как правило, вы хотите, чтобы эти методы поддерживались фактической переменной экземпляра, которую получат и задают получатель и сеттер. Это то, что объявлено в фигурных скобках.

Удаление объявления переменных экземпляра в коде не изменяется очень много, однако, потому что компилятор будет использовать @property декларацию autosynthesize переменных экземпляра для вас. Другими словами, вам, как правило, нужны переменные экземпляра, поддерживающие @property, но вам не нужно объявлять их явно.

В вашем конкретном коде, однако, вы не указали достаточно информации, чтобы узнать, что происходит на самом деле. Многое зависит от того, что вы делаете (или не делаете) в соответствующем файле .m. Если вы скажете @synthesize для этого @property, то будут синтезированы эти переменные экземпляра, chartWidth и chartHeight. Но если вы не скажете @synthesize, вы получите автосинтез переменных экземпляра _chartWidth и _chartHeight, и теперь, если вы также объявите chartWidth и chartHeight переменные экземпляра явно, у вас будет что-то беспорядочное на ваших руках.

+0

И посмотрите полное обсуждение этой темы в моей книге: http://www.apeth.com/iOSBook/ch12.html#_property_accessor_synthesis – matt

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