dispatch_after
является частью новой Grand Central Dispatch , которая является расширением для iOS и направлена на улучшение одновременного выполнения кода на многоядерном оборудовании.
Но в целом, я думаю, что они отвечают различным требованиям в целом. GCD позволяет намного более точный контроль над параллельным выполнением кода. Вы можете планировать блоки в очереди, удалять их, приостанавливать, возобновлять и т. Д. Это более широкая тема, которая должна рассматриваться здесь в целом. Кроме того, GCD предоставляет гораздо больше опций синхронизации.
Что касается сравнения с performSelector
, я думаю, что одно преимущество dispatch_after
справедливо имеет возможность планировать блок без необходимости выбора селектора.
См. это обсуждение .
В целом, у меня нет особого опыта работы с GCD, но я бы сказал, что помимо функции блочного планирования, когда вам просто нужно отложить выполнение некоторых селекторов в вашем пользовательском интерфейсе без особой потребности в параллелизме в целом Я бы использовал performSelector
.
Если вы подумаете об этом, performSelector
дает вам очень плохой параллелизм, поскольку он просто планирует ваш селектор для выполнения в цикле выполнения через минимальное количество времени. С другой стороны, dispatch_after
дает вам элемент управления, который в принципе выглядит на уровне наносекунд (!! это то, что я получаю из документов Apple, но я никогда не использовал его, и я не думаю, что на iPhone вы получит это, возможно, на MacOS).
РЕДАКТИРОВАТЬ: о не планировании блока, я никогда не пытался отменить планирование блока из очереди, но есть вероятность, что dispatch_release
также позволяет вам контролировать это. Если этого не произойдет, вы можете определить свою пользовательскую очередь для блока, который хотите отменить, и освободить всю очередь (до начала выполнения блока), если это когда-либо имеет для вас смысл.
Что касается производительности, я действительно не знаю, что performSelector
делает внутри, но если он планирует поток, то Apple заявляет , что планирование блока с помощью GCD стоит всего 15 инструкций при создании их нить стоит несколько сотен.
Помимо performSelector
, не забывайте, что у вас есть возможность использовать NSOperationQueue
, который основан на GCD и имеет некоторые накладные расходы, но, по их словам, не такие большие. NSOperationQueue
безусловно предлагает возможность отмены.