IOS CS193p - Почему соединение IBAction было перетащено в файл .m, а не в .h?

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

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

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

Кто-нибудь может объяснить?


person Rahul    schedule 04.04.2012    source источник


Ответы (1)


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

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

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

person danh    schedule 04.04.2012
comment
Возможность объявлять IBOutlets в файле .m и связывать их в IB является довольно новой. Еще не все демо и обучающие программы. Это определенно лучшее решение, позволяющее избежать очень плохих приемов, таких как изменение IBOutlets другого объекта (чего никогда не следует делать). - person Rob Napier; 04.04.2012
comment
@danh, можешь ли ты объяснить, почему торговые точки и акции не должны быть публичными? Как View получает доступ к ним в контроллере, если они не являются общедоступными? - person Rahul; 09.04.2012
comment
ViewController может сбивать с толку, если вы изучали MVC. Как вы могли подумать, это не пара двух равных в этом аббревиатуре. Лучше думать об этом как о том, что контролирует представление. В этом смысле имеет смысл держать свое мнение в секрете. Это не правило или, конечно, это обычная практика. Представление - это свойство контроллера представления, и подклассы, которые вы создаете, часто имеют дополнительные подпредставления, которые они контролируют. Этот контроль обычно довольно абсолютен, поскольку они не разделяют этот контроль с другими. Позвольте мне немного погуглить, чтобы получить хорошую ссылку, и я отправлю это здесь. - person danh; 09.04.2012
comment
developer.apple .com / library / ios / # Featurearticles / - лучшее, что я смог найти с помощью быстрого Google. - person danh; 09.04.2012
comment
@Rahul Я новичок в цели c, но, насколько я понимаю, методы, определенные только в вашем .m файле, технически могут быть вызваны любым клиентом без ошибок, просто клиент не должен ожидать, что эти частные методы будут реализовывать тот же интерфейс через некоторое время. Итак, концепция публичного / частного в цели c используется для фиксации и передачи информации о предполагаемом использовании любого данного метода, а не для обеспечения его использования. Если кто-то знает, что это неправда, просьба уточнить. - person John Erck; 12.07.2012