iOS performselectoronMeinThread con múltiples argumentos
-
26-10-2019 - |
Pregunta
Me gustaría realizar un selector en el hilo principal de otro hilo, pero el selector tiene múltiples argumentos, similares a esto:
-(void) doSomethingWith:(int) a b:(float)b c:(float)c d:(float)d e:(float)e {
//...
}
¿Cómo puedo hacer que esto funcione con performSelectorOnMainThread: withObject: waitUntilDone:
?
EDITAR
Me gustaría explicar por qué necesito esto.
Estoy trabajando con UIIMageViews en el hilo principal, y hago los cálculos para ellos en otro hilo. Utilizo muchos cálculos, así que si hago todo en el hilo principal, la aplicación retrasa. Sé que los elementos de la interfaz de usuario solo se pueden manipular en el hilo principal, por eso me gustaría que funcione de esta manera, para que el hilo principal pueda escuchar eventos táctiles sin retrasos.
Solución
Cuando usas iOS> = 4, harías esto en su lugar:
dispatch_async(dispatch_get_main_queue(), ^{
[self doSomething:1 b:2 c:3 d:4 e:5];
});
Eso es como hacer waitUntilDone:NO
. Si desea esperar hasta que termine el método, use dispatch_sync
en cambio.
Otros consejos
Tendrás que usar un Nsinvocación
Cree el objeto, establezca el objetivo, el selector y los argumentos.
Entonces, usa
[ invocationObject performSelectorOnMainThread: @selector( invoke ) withObject: nil, waitUntilDone: NO ];
Puede aprobar un objeto de NSDictionary/nsArray tipo que tiene argumentos requeridos.
y acepte el mismo tipo de objeto en su función. Luego, descomponga los valores y proceda con el procesamiento.
Debe usar NSNumber para valores numéricos para agregarlos a NSArray/NSDictionary y más tarde en su función, puede convertirlos con intValue
/floatValue
etc.
Lo mejor de dólar.