В бесконечном стремлении к отзывчивости интерфейса я хотел бы получить более полное представление о случаях, когда основной поток выполняет операции блокировки.
Я ищу какой-то "режим отладки" или дополнительный код, или крючок, или что-то еще, благодаря чему я могу установить точку останова/лог/что-то, что попадет, и позволить мне проверить, что произойдет, если моя основная тема "добровольно" блокирует для ввода-вывода (или по какой-либо причине, действительно), кроме как для простоя в конце runloop.
В прошлом я смотрел на продолжительность часов на стене runloop, используя наблюдателя runloop, и это было ценно для решения проблемы, но к тому моменту, когда вы можете проверить, слишком поздно, чтобы получить хорошую идею о том, что это выполнял, потому что ваш код уже выполнен для этого цикла runloop.
Я понимаю, что есть операции, выполняемые UIKit/AppKit, которые являются только главными потоками, которые вызовут ввод-вывод и заставят основной поток блокировать, в какой-то степени, безнадежный (например, доступ к картону представляется потенциально блокирующей, основной-только-операция), но что-то было бы лучше, чем ничего.
У кого-нибудь есть хорошие идеи? Похоже на то, что было бы полезно. В идеальном случае вы никогда не захотите блокировать основной поток, пока ваш код приложения активен в runloop, и что-то вроде этого было бы очень полезно для достижения как можно ближе к этой цели.