Объявление переменных в @implementation - PullRequest
7 голосов
/ 30 октября 2011

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

@implementation ViewController
{
    NSString *name;
}

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

1 Ответ

8 голосов
/ 30 октября 2011

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

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

Зачем объявлять эту строку NSSt в области видимости?

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

...