Мне немного неясно, что вы пытаетесь сделать.Похоже, вы пытаетесь выполнить циклическую операцию в фоновом потоке и (в конце каждого цикла) использовать результаты для обновления пользовательского интерфейса.Другие публикации предлагают использовать NSTimer в основном потоке (который является потоком only , который вы должны использовать для обновления пользовательского интерфейса).Вы бы включили таймер время от времени (неоднократно);в обратном вызове, который вызывается при его запуске, вы должны скопировать любые данные / информацию из объектов, которые обновляются фоновым потоком, в соответствующие представления пользовательского интерфейса, а затем вызвать setNeedsDisplay, чтобы вызвать обновление пользовательского интерфейса.Проблема заключается в согласованности используемой вами информации: если фоновый поток продолжает обновлять объект (ы), вы можете скопировать смесь старой и новой информации в пользовательский интерфейс.Возможно, вам нужен объект «доставки», который заполняет фон, а затем передает его в модуль обновления пользовательского интерфейса;такой объект будет содержать согласованный набор информации, получаемый в конце фонового цикла.
В любом случае вы не хотите спать в главном потоке.Все, что он делает, это замедляет ответ пользовательского интерфейса.