Недавно у меня была похожая проблема. Скорее всего, ваши отложенные обновления - это то, что вы делаете в пользовательском интерфейсе. И вот проблема: вы не работаете в главном потоке приложения (также называемом потоком пользовательского интерфейса). Поэтому, что бы вы ни изменили в пользовательском интерфейсе, оно на самом деле не будет видимо до тех пор, пока ... не появится ощущение, что это происходит при перерисовке, вызванной чем-то другим в приложении.
Что вам нужно сделать, так это поместить в очередь блоков графические обновления в потоке пользовательского интерфейса, например:
dispatch_async(dispatch_get_main_queue(), ^{
// Do GUI stuff.
});
Иногда ваш блок может быть большим или просто использовать код, который ранее выполнялся в главном потоке, поэтому трудно переместить все это в определенное место, чтобы запустить его в главной очереди. Для этих ситуаций поставьте в очередь принудительное обновление в потоке пользовательского интерфейса в конце вашего блока:
dispatch_async(dispatch_get_main_queue(), ^{
[self.somewidget setNeedsDisplay];
[self.view setNeedsDisplay];
[self.dontforgetme setNeedsDisplay];
});
Что касается вашего " приложения, занимающего приятное время отклика моего приложения ", похоже, что вы пытаетесь использовать GDC, чтобы избежать блокировки пользовательского интерфейса. Чтобы программно убедиться, что вы не выполняете ресурсоемкие операции в потоке пользовательского интерфейса, и наоборот, вы запускаете обновления графического интерфейса в блоке пользовательского интерфейса, я сделал себе следующие макросы:
/// Stick this in code you want to assert if run on the main UI thread.
#define DONT_BLOCK_UI() \
NSAssert(![NSThread isMainThread], @"Don't block the UI thread please!")
/// Stick this in code you want to assert if run on a background thread.
#define BLOCK_UI() \
NSAssert([NSThread isMainThread], @"You aren't running in the UI thread!")
Как видно из комментариев, я склонен использовать эти макросы в начале методов, которые я хочу убедиться, что я не использую по ошибке в неправильном месте. Я поместил эти макросы и другие случайные вещи в https://github.com/gradha/ELHASO-iOS-snippets, которые вы можете найти полезными.