Ответы, которые уже даны, охватывают вопрос, поставленный адекватно, я бы просто добавил, что performSelectorOnMainThread:withObject:waitUntilDone:
не просто предпочтителен для всего, что говорит с UIKit, он в основном требуется, так как до iOS 4.0 UIKit вообще не был безопасным для потоков и даже в 4.0+ это только очень избирательно безопасно звонить из других потоков. Не гарантируется безопасное создание UIActivityIndicatorView
в фоновом потоке или добавление его в другое представление. Поэтому то, что вы делаете, может произойти сбой случайно или в будущих версиях ОС, или привести к любой другой части неопределенного поведения.
Сведения об этом см. В введении к UIKit , в частности:
Примечание: По большей части, классы UIKit
следует использовать только с
Основная тема приложения. Это
особенно актуально для производных классов
от UIResponder или с участием
манипулирование пользователем вашего приложения
интерфейс в любом случае.
Если ваши попытки вызвать ваш метод в главном потоке оказались безрезультатными, то, скорее всего, ваш основной поток заблокирован. Селектор, который вы передадите, будет запланирован на выполнение, как только это будет возможно, но это просто еще одна вещь в списке того, что нужно сделать в этом потоке. Так что, если что-то еще в настоящее время блокирует, тогда это не будет сделано до тех пор, пока эта вещь не закончится, и в этот момент вы вполне можете закончить с рисованием и удалением, происходящим почти атомарно.