2012-04-04 2 views
6

Я заметил, что в демо-версии калькулятора для Stanford CS193p соединение IBOutlet перетаскивалось из метки в заголовочный файл. Однако соединение IBAction было напрямую создано в файле .m. Я пробовал читать документацию и искать в Google, но не смог найти причину этого.IOS CS193p - Почему соединение IBAction перетащили в файл .m, а не в .h?

Я бы сказал, что метод IBAction digitPressed также должен быть объявлен в файле заголовка (не должен ли он быть частью интерфейса?).

Я, очевидно, довольно новичок в Objective C (в основном работал на Java), поэтому я уверен, что у меня нет чего-то основного.

Может ли кто-нибудь объяснить это?

ответ

8

Объявление объектов в заголовочном файле класса делает их частью открытого интерфейса. Это включает в себя выходы и действия, определенные на контроллере представления.

Должен ли быть обнародован вопрос о дизайне. Хорошим руководителем является: только если это необходимо. С точками и действиями ViewControllers они не обязательно должны быть - и поэтому не должны быть общедоступными.

Что обычно происходит, так это то, что вы делаете некоторые догадки о том, что должен содержать публичный интерфейс, а затем (если вы опрятный разработчик), вы снова смотрите на то, когда реализация созрела, и удалите что-либо несущественное.

+3

Возможность объявить IBOutlets в файле .m и связать их в IB довольно нова. Демо и учебники не все догнали. Это, безусловно, лучшее решение и позволяет избежать очень плохих практик, таких как изменение IBOutlets другого объекта (чего вы никогда не должны делать). –

+0

@ danh, можете ли вы объяснить, почему выходы и действия не должны быть общедоступными? Как View обращается к ним в контроллере, если они не являются общедоступными? – Rahul

+1

ViewController может быть запутанным именем, если вы учились в MVC. Это не так, как вы думаете, сочетание двух сверстников в этом аббревиатуре. Лучше думать об этом как о том, что контролирует представление. В этом смысле имеет смысл держать свое мнение в секрете. Это не правило или курс, просто обычная практика. Вид - это свойство контроллера вида, а подклассы, которые вы создаете, часто имеют дополнительные подсмотры, которые они контролируют. Этот контроль обычно является довольно абсолютным, поскольку они не разделяют этот контроль с другими. Позвольте мне немного поработать над Google, и я отправлю ее здесь. – danh