[self performSelectorOnMainThread:@selector(doStuff:)
withObject:myObject
waitUntilDone:YES];
Это гарантирует, что селектор выполняется в основном потоке, добавив его в основной цикл цикла. Когда вы установите waitUntilDone:YES
, вы пропустите свой текущий поток, пока цикл основного запуска должен выполнять селектор. В однопоточной среде это позволит запустить runloop сразу после того, как вы это вызвали, в многопоточной среде основная runloop выполнит селектор, как только он сделает следующий шаг.
Вы в любом из обоих случаях небольшие накладные расходы, как селектор не выполняется сразу после вызова функции, но на более позднем этапе, а [self doStuff:myObject];
выполняет селектор сразу
спасибо !! Я был очень подозрительным! – SpaceDog
Извините, ребята, но это было не так точно. Если вы вызываете это из основного потока, метод будет выполняться немедленно, потому что параметр 'waitUntilDone: YES'. Сообщение пропустит цикл выполнения и очень важно упомянуть, что цикл цикла никогда не будет выполняться при этом условии, потому что в цикле основного запуска будет много вещей, включая пуск пула автозапуска и выполнение сообщений в очереди, что может повлиять на управление памятью и порядок выполнения код. – tia
Эй, благодарю вас за информацию. Не знал этого! – JustSid