iOS: Каковы издержки обработки при вызове метода Objective C? - PullRequest
4 голосов
/ 18 апреля 2011

Я пишу некоторый код обработки звука в реальном времени, который должен быть выполнен в обратном вызове рендеринга аудиоустройства.

Этот поток имеет самый высокий уровень приоритета, который распознает система.

Apple дает указание минимизировать объем обработки, выполняемой в этом вызове.Одна из их рекомендаций - избегать вызова метода Objective-C.

Но почему?

Что происходит при вызове метода Objective-C?каковы фактические накладные расходы?

1 Ответ

8 голосов
/ 18 апреля 2011

Разрешение метода Objective C является динамическим.В других языках, таких как C или C ++, вызов функции устанавливается во время компиляции, по сути, как переход к адресу, который содержит функцию.Однако в Objective-C вызовы методов реализованы как «отправка сообщений», которые не работают одинаково.Вместо жесткого прыжка используется процесс поиска.

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

Майк Эш дает отличную запись о том, что происходит с обменом сообщениями Objective-C, если вы заинтересованы вдополнительная деталь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...