2015-06-17 2 views
0

Всего вопрос новичка следует ...Какао ViewController.m против Cocoa Touch ViewController.m

Я учусь Objective C на основе какао (OS X) разработка приложений. Большинство книг и видео, которые у меня есть, основаны на iOS, поэтому я вижу, как разные платформы отличаются.

Я конвертировал простое приложение для iOS в OS X. Я получил преобразованное приложение OS X, чтобы нормально работать, но у меня есть вопрос: Почему у файла OS X ViewController.m нет раздела @interface?

Я создал приложение iOS с помощью Interface Builder, перетащив элементы пользовательского интерфейса из Main.Storyboard в ViewController.m, в помощник редактора. Я перетащил ячейку UILabel в раздел @interface ViewController.m, создал переменную экземпляра @property. В iOS раздел public @interface ViewController.h остается пустым.

В приложении OS X я перетащил ячейку NSTextField в раздел @interface файла ViewController.h, чтобы создать аналогичную переменную экземпляра.

Является ли OS X ViewController.h поле @interface правильным местом для IBOutlets? Разве это не подвергает эти переменные экземпляра другим классам? В случае iOS, поскольку переменные экземпляра НЕ добавлены в файл ViewController.h, я предполагаю, что они скрыты, правильно? Могу ли я сделать переменные экземпляра OS X частным?

Как я уже говорил, код OS X работает, я просто пытаюсь понять различия между платформами и убедиться, что я возглавляю в правильном направлении.

ответ

1

Прежде чем я ответил я хотел проверить, если то же самое случилось с мне- - но когда я создал пользовательский NSViewController в новом приложении iOS или OS X, оба будут генерировать @interface в файле реализации (файл .m)

enter image description here

Так что я не уверен, почему вы это видите.

Однако, чтобы ответить на ваш вопрос (как вы сказали), свойства, объявленные в @interface в вашем файле заголовка (.h), являются общедоступными. Хотя свойства, объявленные в @interface в реализации, являются частными. Это связано с тем, что внутри вашей реализации @interface называется «Расширение». Который в основном просто анонимный «Категория».

Если внешним объектам не нужна ссылка на ваши розетки, я бы продолжил их размещение внутри вашего файла реализации. Если по какой-либо причине вы не генерируете для вас, нет ничего плохого в том, что вручную вводите собственное расширение класса для объявления свойств.

+0

Большое вам спасибо за ваш ответ. Как вы получили свой код?Я использую Xcode 6.3.2 на Yosemite. Когда я создаю новый проект, используя «Файл»> «Создать»> «Проект ...», выберите «Приложение для какао» в приложении OS X. У меня есть «использование раскадровки». Когда новый проект открывается, ViewController.m не имеет секции @interface. На Main.storyboard отображается Window Controller и один ViewController. Я не добавляю никаких дополнительных ViewControllers, я просто использую тот, который автоматически создается. Вы делаете что-то другое? – SDGary

+0

И, да, я проверил, что могу вручную добавить код @interface. Это просто обход ... – SDGary

+0

Я делаю то же самое - я не уверен, почему вы не создали расширение '@ interface' для вас. Приятно слышать, что это работает ^^ –

1

Да, вы правая переменная экземпляра не должна добавляться в файл ViewController.h, чтобы сделать их закрытыми. То же, что вы можете использовать переменные экземпляра как частные переменные в OS X. Как этот `@ интерфейс MasterViewController()

@property (неатомный, слабый) NSString * strTemp;

@end

@implementation MasterViewController

Вы можете получить разницу между какао и какао-контакт по уже разместил вопрос для этого