2015-10-08 2 views
1

Как методы вызываются в iOS? Существует так много объявлений методов, которые нигде не вызываются, но если я помещу точку останова внутри метода, она прекратит выполнение в блоке метода. Одна библиотека, с которой я работал, - ICViewPager.Где вызывается методы iOS?

Практически не существует явных вызовов методов, как я должен знать выполнение программы, если объявляются случайные методы без какой-либо идеи, где они вызываются. Если вы ищете имя метода в любом месте кода, есть только один результат. Как они выполняются? Что определяет порядок выполнения?

+2

, пожалуйста, дайте пример метода, который вам интересен в ICViewPager. – BooRanger

+0

, если честно, почти любой метод в ViewPagerController.m. Например, когда в приложении tabView вызывается drawRect. –

+1

Существует много делегатов, источников данных (протоколов) и суперклассов, используемых для вызова методов в iOS. Не всегда очевидно, кто звонит. –

ответ

5

Большинство пользовательских интерактивных приложений (мобильный, рабочий стол или даже веб-ли) использовать подход, управляемый событиями. Методы вызываются в ответ на события, обычно инициируемые пользователем, но, возможно, другими действиями, такими как приход пакета из сети или доступность обновленных данных местоположения GPS.

Порядок исполнения зависит от порядка этих событий в значительной степени; очевидно, что определенные блоки кода, такие как инициализация приложений и, скажем, методы жизненного цикла UIViewController, всегда будут возникать одновременно или в одной и той же последовательности по отношению друг к другу, но в целом выполнение является асинхронным.

В результате вы не можете точно указать точную последовательность выполнения во временных условиях (т. Е. Вы не можете сказать, что «a будет работать через 5 секунд, а затем b будет работать после этого, а затем ...»). Вы можете понять последовательность выполнения в ответ на события - «когда пользователь удаляет эту кнопку, этот метод выполняется. Он обновляет данные на сервере». «Когда сервер уведомляет, что данные были сохранены, этот код выполняет обновление текстового поля» или «когда периферийное устройство Bluetooth отправляет данные, этот код выполняет».

В случае drawRect: ответ, как отметил Фил в своем комментарии, в основном «когда система нуждается в этом контроле, чтобы нарисовать себя». Поскольку вы не знаете, что пользователь собирается делать или что произойдет (например, телефон может звонить, обновляя дисплей полностью из вашего управления приложениями, требуя вызова drawRect), вы не можете точно знать, когда вещи будут вызваны.

Вам нужно понять контекст, в котором вы пишете код, что его запустит и что должен делать код.

Если контекст является подклассом, таким как UIView или UIViewController, то вам нужно обратиться к документации, чтобы узнать, какие события или методы необходимо реализовать вашему коду.

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

К сожалению, я думаю, что ответ на ваш вопрос в случае объекта, о котором вы упомянули, во многих случаях сводится к «RTFM»; вам нужно понять класс, который является подклассом, и события и методы, которые требуются.

Learning Swift или Objective-C - это легкие части разработки iOS. Понимание классов и рамок и то, как они работают, - настоящая кривая обучения!

0

Xcode может отображать информацию о вызывающей и вызываемой

  • В Xcode откройте помощник редактора ⌥⌘↩
  • В левой редактора нажмите на символ
  • В правом редакторе открыть навигацию в верхней части меню. Есть caller и callee пункты меню, которые отображают текущую информацию о выбранном символе
+0

На самом деле это не вопрос. Сделайте это по методу 'drawRect:' пользовательского вида, и вы ничего не увидите о том, что его вызывает. – rmaddy

Смежные вопросы