After doing some digging, the UI can be updated asynchronously through for loops with the following code:
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^(void) {
for(int i=0; i<max; i++)
{
//Run for loop stuff here
dispatch_async(dispatch_get_main_queue(), ^(void) {
//Run UI updates in here
});
}
});