Объявление переменных в @implementation

Я видел пример в книге, показывающей этот код:

@implementation ViewController
{
 NSString *name;
}

Почему бы не объявить это в @interface? Какая разница в объявлении переменных в @implementation вместо @interface? Зачем объявлять этот NSString в области?

1 ответ

Преимущество объявления ivars в разделе @implementation - лучшее инкапсулирование. Таким образом, ivars не должны появляться в файле .h и поэтому не видны внешним пользователям вашего класса, которые только видят заголовочный файл. Это лучше скрывает внутреннюю реализацию класса.

Вообще говоря, теперь, когда свойства могут иметь автосинтезированные ivars, а другие ivars могут быть объявлены непосредственно в блоке @implementation, я не вижу причин, по которым вы должны вообще объявлять ivars в своем @interface (кроме обратного совместимость).

Зачем объявлять эту NSString в области?

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

licensed under cc by-sa 3.0 with attribution.