Я думаю, что executeSelectorOnMainThread: withObject: waitUntilDone: правильно,
До этого я использую операцию для вычисления размера текста, и использую waitUntilAllOperationsAreFinished в главном потоке, чтобы дождаться ее возврата,
Но еслиЯ также использую executeSelectorOnMainThread: withObject: waitUntilDone в операции и устанавливаю для параметра waitUntilDone значение Да (поскольку мне нужен результат)
Основной поток будет зависать
Так что теперь я удаляю waitUntilAllOperationsAreFinished и используюасинхронный объект, чтобы гарантировать, что операция не запустится, пока предыдущий не остановится
[md removeAllObjects];
[md setObject:subString forKey:@"text"];
[md setObject:[NSNumber numberWithInt:view_w ] forKey:@"width"];
[md setObject:[NSNumber numberWithInt:height_left + font_h ] forKey:@"height"];
[self performSelectorOnMainThread:
@selector(calculateTextRegion:)
withObject:md
waitUntilDone:YES];
CGSize stringSize = textRegion;