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.

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top