texto - dispatch_async y bloquear en iOS
como bloquear un numero en un iphone 7 (3)
¿Qué significa este fragmento de código?
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
TMBaseParser *parser=[[TMBaseParser alloc] init];
parser.delegate=self;
NSString *post =nil;
NSData *postData = [post dataUsingEncoding:NSUTF8StringEncoding];
[parser parseForServiceType:TMServiceCategories postdata:postData];
});
por favor explícalo brevemente. Gracias
Ese es un bloque de Grand Central Dispatch.
- dispatch_async es una llamada para ejecutar en otra cola.
- dispatch_get_global_queue es una llamada para obtener una cola específica con las características deseadas. Por ejemplo, el código podría ejecutarse con baja prioridad en DISPATCH_QUEUE_PRIORITY_BACKGORUND.
- Dentro del bloque, el código no hace nada. La publicación está configurada en nil. A continuación, se envía un mensaje a nil "dataUsingEncoding". Objective C descarta todas las llamadas a nil. Finalmente, el analizador es enviado "nil" postData.
- En el mejor de los casos, esto no hará nada. En el peor de los casos, al enviar el analizador, los datos nulos se bloquearán.
La pieza de código en
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
});
se ejecuta de forma asíncrona en un hilo de fondo. Esto se hace porque el análisis de datos puede ser una tarea que consume mucho tiempo y podría bloquear el hilo principal que detendría todas las animaciones y la aplicación no respondería.
Si desea obtener más información, lea la documentación de Apple en Grand Central Dispatch.
Si los fragmentos de código anteriores no funcionan, intente esto:
C objetivo:
dispatch_async(dispatch_get_main_queue(), ^{
});
Las actualizaciones de UI siempre se deben ejecutar desde la cola principal. El símbolo "^" indica el inicio de un bloque.
Swift 3:
DispatchQueue.global(qos: .background).async {
print("This is run on the background queue")
DispatchQueue.main.async {
print("This is run on the main queue, after the previous code in outer block")
}
}