Actualización de los elementos de la interfaz de usuario en un subprocess de background antes de agregarlos a una vista

Solo estoy tratando de envolver mi cabeza alnetworkingedor de Grand Central Dispatch (GCD) y no puedo encontrar una respuesta sobre esto

Así que sé que, en general, se supone que no debes actualizar los elementos UIView de ningún hilo que no sea el hilo principal. Entonces esto es ilegal:

dispatch_async(workerQueue, ^{ self.view.backgroundColor = [UIColor networkingColor]; }); 

¿Pero se te permite trabajar en los elementos de vista antes de que se agreguen a la vista? En otras palabras, ¿está permitido esto?

 dispatch_async(workerQueue, ^{ UIButton *thisLevelButton = [UIButton buttonWithType:UIButtonTypeCustom]; thisLevelButton.frame = CGRectMake(x, y, BUTTON_WIDTH, BUTTON_HEIGHT); thisLevelButton.tag = kLevelButtonTags + j; int levelState = [[[thisCat objectForKey:[levelNamesInCat objectAtIndex:j]] objectAtIndex:4] intValue]; [thisLevelButton setBackgroundImage:[UIImage imageNamed:@"ccLSButton50lock"]forState:UIControlStateNormal]; thisLevelButton.alpha = 0.5; [thisLevelButton addTarget:self action:@selector(unlockButtonAction:) forControlEvents:UIControlEventTouchUpInside]; dispatch_async(dispatch_get_main_queue(), ^{ [self.view addSubview:thisLevelButton]; } }); 

Sí tu puedes. La mejor práctica es no actualizar . La initialization está bien.

Un ejemplo se puede leer en esta publicación de blog. Está casi en la línea de lo que estás intentando.