4
@interface AClass : SomeType { 
@protected 
    NSMutableArray* amINotAlreadyProtected; //? 
} 

Зачем нужен этот код @protected, если @protected является значением по умолчанию? Этот код был написан очень опытным программистом, но я сам опускаю спецификатор.Почему этот ivar нужен @protected, если @protected является значением по умолчанию?

+0

'@ public',' @ protected' и '@ private' относятся к возрасту, когда свойства были закодированы вручную (у них не было директивы' @ property'), и где доступ iVar был почти универсальным, если вам нужно было все сделать. Они никогда не обходились, чтобы осуждать их, потому что части фреймворков Apple все еще используют их. – CodaFi

+0

@CodaFi OK. Спасибо за информацию. –

+0

@JoshCaswell Поскольку программист с опытом работы около 25 лет написал его в своем классе. Я бы опустил его сам. –

ответ

5

Существует нет необходимости по ключевому слову @protected, поскольку это поведение по умолчанию.

Однако некоторые программисты склонны использовать его в любом случае, если менее опытный программист приходит позже и не знает этого. Можно также упомянуть, что он повышает читаемость кода, если есть некоторые переменные, которые защищены и другие частные или публичные.

+0

Спасибо за ваш ответ –

+0

На самом деле есть необходимость. Или был. – bbum

2

Это от возраста, когда вы можете увидеть:

@interface Foo:Bar 
{ 
    @private 
    … ivars … 
    @protected 
    … ivars … 
} 
… 
@end 

То есть, в то время как @protected по умолчанию, вам нужно будет использовать его, если вы перешли на один из других вариантов и хотел переключение обратно. И, да, были причины (часто плохие), чтобы гарантировать, что порядок объявления ivar сохранился с момента выпуска до выпуска.

Помимо этого, в том числе ключевое слово для случая по умолчанию, гарантирует, что педальные серые бороды (например, я) могут быть четко выражены в своих объявлениях.

Однако современные дополнения, такие как @property, означают, что такие махинации больше не нужны.

+0

Спасибо. Да, я понимаю, что в случае, который вы видели здесь, нам понадобится '@ protected', так как я понимаю, что все переменные, которые следуют за ключевым словом' @ private', будут частными, если только переключатель не будет возвращен '@ protected'. Это было не так в вопросе, который я задал, хотя в нем не было '@ private' или' @ public'. –

+0

Для педантичных седых бород .... – bbum

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

  • Нет связанных вопросов^_^