Si usted está tratando de llamar al método , se puede utilizar la sintaxis estándar:
[self meth2:next_int];
Si realmente necesita usar el performSelectorOnMainThread:
puede envolver el número en un NSNumber
para la llamada. Usted dice que no puede hacer esto porque es necesario para cambiar el número, pero se puede simplemente sacar un int y cambiar eso:
[self performSelectorOnMainThread:@selector(meth2:) withObject:[NSNumber numberWithInt:next_int] waitUntilDone:NO];
// ... later ...
- (void)meth2:(NSNumber *)number {
int myInt = [number intValue];
// do stuff with myInt
}
Pero tal vez usted quiere decir que usted desea obtener el valor del número como una salida de su llamada al meth2
. Si eso es lo que quiere decir, entonces usted podría pasar en un puntero doble para que pueda recibir un nuevo objeto de nuevo:
- (void)meth2:(NSNumber **)number {
int myInt = [*number intValue];
// do stuff with myInt
*number = [NSNumber numberWithInt:myInt];
}
// The caller can now operate like this:
NSNumber *number = [NSNumber numberWithInt:next_int];
[self performSelectorOnMainThread:@selector(meth2:) withObject:&number waitUntilDone:YES];
int returnInt = [*number intValue];
Por supuesto, eso no es realmente seguro para subprocesos, por lo que si usted está haciendo cosas con múltiples hilos , Aconsejaría usar la palabra clave @synchronized
para acceder a variables accedidas por subprocesos múltiples o configurar propiedades atómicas (es decir, propiedades no declaradas como nonatomic
).
Además, la metanfetamina es mala para ti. jaja
Hola Tyler, no estoy seguro acerca de la palabra clave @synchronized, voy a leer sobre, pero desde este la variable entera se usa como un 'resultado' del hilo, no hay necesidad de preocuparse por la concurrencia y esas cosas. El ..withObject: [NSNumber numberWithInt: next_int] .. funciona muy bien, el (NSNumber **) me da una advertencia de tipo de puntero incompatible. Lo tendré en cuenta acerca de la metanfetamina ... ¡gracias! – sergiobuj