Задача C «целевое действие» в .m и «выход» в .h

В настоящее время я прохожу курс разработки приложений для iPhone и iPad Stanford CS193p ( http://itunes.apple.com/itunes-u/ipad-iphone-application-development/id473757255 ) и на второй лекции я озадачился, когда он подключил кнопки калькулятора к .m файлу, он подключил метку дисплея (которая показывает значение на калькуляторе) к файлу .h...

Мое понимание всей реализации и файла заголовка заключалось в том, что вы объявляете члены класса в заголовке и говорите, что они делают в реализации, поэтому это не имеет для меня смысла...

любая помощь будет принята с благодарностью


person sean5    schedule 14.07.2012    source источник


Ответы (1)


В Objective-C возможно, чтобы файл .m содержал методы для класса, которые не объявлены в файле .h для класса. На самом деле с помощью функции «Категории» языка может быть более одного .h и .m, которые определяют все методы для класса.

Что касается того, что может быть связано, ключевое слово IBOutlet отмечает свойства или переменные, а IBAction отмечает методы действия. Это всего лишь подсказки для редактора; все «соединения» устанавливаются во время выполнения автоматически.

person Kevin Grant    schedule 14.07.2012
comment
есть ли какая-то причина, по которой вы поместили бы его в один, а не в другой? Я новичок в программировании (я прошел всего несколько уроков в школе), поэтому базовое объяснение действительно поможет, большое спасибо за ответ! - person sean5; 15.07.2012
comment
Многие методы существуют только для помощи в реализации, поэтому их бесполезно показывать в заголовке. Полностью закрытые методы часто указываются в категории над .m (например, @interface MyClass (MyClassInternal) ...), чтобы их можно было вызывать без предупреждений, даже если они не упоминаются в заголовке. В моем коде я также не показываю метод в .h, если он вызывается автоматически (например, dealloc; любой метод, который определен только для соответствия протоколу; любой метод, который используется только схемой обратного вызова, такой как NSNotificationCenter) . - person Kevin Grant; 15.07.2012
comment
Хорошо, это начинает иметь больше смысла, на самом деле я не очень хорошо объяснил свою ситуацию... В подкасте они перетащили UILabel (текстовая метка) в файл .h и IBAction (кнопка) в файл .m, может быть, они не привели их обоих в файл .h, потому что кнопка будет отправлять значения (какая кнопка числового значения была нажата [это программа-калькулятор RPN]), а метка будет просто показывать значение расчетов? - person sean5; 15.07.2012
comment
Одна вещь, которая требуется в основном интерфейсе для класса, — это хранимые данные и, соответственно, любые свойства. В этом случае UILabel* нужно будет где-то запомнить, поэтому это должно быть поле и/или свойство в заголовке (.h). С другой стороны, методы действий — это просто код; обычно они вызываются только элементами пользовательского интерфейса (а не обычным программным кодом), поэтому они не обязательно должны быть доступны в .h для использования кем-либо еще. Я предполагаю, что именно поэтому им нужно было перетащить на .m, чтобы связать кнопку с действием. - person Kevin Grant; 15.07.2012