iPhone dev — performSelector:withObject:afterDelay или NSTimer?

Поддержка WPF декларативного UI через XAML, богатую шаблонную обработку средств управления и моделирование и инструменты как Смешение Выражения , делает его намного лучше для разработчиков для работы с разработчиками на том же проекте. Плюс, это дает разработчикам гибкость приложенных свойств зависимости и чрезвычайно мощной привязки данных. Кроме того, Silverlight поддерживает подмножество XAML и тех же классов управления как WPF, таким образом, Ваше приложение может быть портировано как RIA с минимальными усилиями.

я выбрал бы WPF over Windows Forms любой день. Даже если целевые машины только имеют .NET 2.0 , если пользователь может установить дополнительные программы, новый Клиентский профиль Платформы.NET делает довольно легким развернуть приложения WPF.

единственная причина, которую я мог бы решить продолжить работать с Windows Forms, состоит в том, если продукт будет развернут на машинах, которые заблокированы вниз и имеют только.NET 2.0 или.NET 1.1.

10
задан mk12 29 September 2009 в 01:48
поделиться

3 ответа

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

Я бы сказал, что придерживайтесь NSTimer.

6
ответ дан 4 December 2019 в 01:57
поделиться

Поскольку ваше приложение зависит от точности времени (т.е. оно должно выполняться один раз в секунду), NSTimer будет лучше. Для выполнения самого метода требуется некоторое время, и NSTimer с этим справится (если ваш метод занимает менее 1 секунды, если он вызывается каждую секунду).

Для многократного воспроизведения звука вы можете установить обратный вызов завершения и воспроизвести там звук:

SystemSoundID tickingSound;

...

AudioServicesAddSystemSoundCompletion(tickingSound, NULL, NULL, completionCallback, (void*) self);

...

static void completionCallback(SystemSoundID mySSID, void* myself) {
  NSLog(@"completionCallback");

  // You can use this when/if you want to remove the completion callback
  //AudioServicesRemoveSystemSoundCompletion(mySSID);

  // myself is the object that called set the callback, because we set it up that way above
  // Cast it to whatever object that is (e.g. MyViewController, in this case)
  [(MyViewController *)myself playSound:mySSID];
}
1
ответ дан 4 December 2019 в 01:57
поделиться

Just to add a bit to the other answers, the case for a recursive call would be when the call might take an unknown amount of time - say you are calling a web service repeatedly with small amounts of data until you are finished. Each call may take some unknown amount of time so you have the code do nothing until the web call returns, then the next batch is sent out until no more data remains to be sent and the code does not call itself again.

2
ответ дан 4 December 2019 в 01:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: