I know as a general guideline you should always perform GUI updates on the main thread. But sometimes it’s not that obvious. E.g where should I perform the calls:
setBadgeValue: of a UITabBarItem?
Or
[[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:YES]
In the class reference it’s not specified whether these methods can be run on a non-main thread.
The general rule is that you should keep UIKit updates to the main thread, unless UIKit calls through your implementation from another thread.
From iOS 4 release notes:
The routines used to access and manipulate the graphics context can now correctly handle contexts residing on different threads.
With that information, and unless I or somebody else digs up more docs (which I scanned release notes and saw no more):
Assume it is safe to call only from the main thread.
Assume it is safe to call only from the main thread.