Цель C, один метод за один раз? - PullRequest
2 голосов
/ 04 января 2012

Если я делаю простой проект Xcode в cocos2d, мне всегда было интересно, что происходит в следующей ситуации:

Метод А назначается каждые 0,01 секунды

Метод B назначается каждую 1 секунду

Теперь предположим, что метод B является крупным методом и требует времени для вычисления. Будет ли он когда-либо прерван методом A?

Другими словами, всегда ли метод завершается до запуска другого?

Я не создал темы или что-то еще.

Ответы [ 3 ]

5 голосов
/ 04 января 2012

В общем, когда вы планируете вещи в потоке пользовательского интерфейса приложения UI, после запуска определенной операции она не прерывается (за исключением ошибок).Это относится не только к iOS, но и к большинству платформ пользовательского интерфейса.

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

Но вы никогда не будете прерваны вашими собственными операциями.

2 голосов
/ 04 января 2012

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

Эта цитата взята непосредственно из NSTimer раздела обзора ссылок на класс на сайте Apple:

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

То есть механизм опроса метода А (NSTimer дляпример) не сработает до тех пор, пока метод B не завершит работу, предполагая, что они находятся в одном цикле выполнения.Метод A, по сути, не прерывает метод B, но зависит от того, выполняет ли он свою задачу.

Если вам нужна информация о размещении метода A и метода B в отдельном потоке, чтобы они работали независимо, вы можете начать здесь: Grand Central Dispatch

1 голос
/ 04 января 2012

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

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