по умолчанию @protected, поэтому единственное отличие состоит в том, что если вы хотите получить к ним прямой доступ, что обычно считается плохой практикой, но в первом примере вы не можете сделать это:
thing * aThing = [[thing alloc] init];
aThing->x = 5;
Редактировать: (какМне отказали, ответив на фактический вопрос, а не на подразумеваемый вопрос.)
В Objective-C есть 3 спецификатора видимости: @public
;@private
;и @protected
.
Синтаксис влияет только на видимость iVars, но не на методы, все методы общедоступны.
спецификатор работает для всех последующих iVars, пока не достигнет другого спецификатора;
@public
разрешает прямой доступ к иварам вне экземпляров класса или подкласса.
@protected
разрешает прямой доступ к иварам только в экземплярах класса или его подклассов.
@private
разрешает прямой доступ к ivars изнутри экземпляров класса, но не из подклассов.
, как и для @property
, это языковая конструкция, представленная в Objective-C 2.0, которая позволяет вам использовать.
(точка) метод доступа для вызова методов.
поведение по умолчанию @property int x
будет ссылаться на 2 метода в зависимости от того, используете ли вы его в качестве оператора левой руки (установщик) или правой руки (получатель),получатель по умолчанию будет -(int)x;
, а установщик по умолчанию будет -(void)setX:(int)x;
, @property сам по себе не создает эти методы, но разрешает доступ к ним.
поведение по умолчанию может быть изменено с помощью следующего синтаксиса @property(getter=somethingOtherThanX,setter=somethingOtherThanSetX:)int x;