Objetivo C Llamadas recursivas

Estoy tratando de verificar continuamente las lecturas desde el acelerómetro antes de que la camera tome una foto. Tengo una function que toma una image, y al comienzo de esa function verifico si las lecturas del acelerómetro son demasiado altas. Si lo son, me gustaría llamar a la function nuevamente para comprobar si la aceleración se ha detenido.

- (void)takePicture { if (accelerating == YES) { [self takePicture]; } else { // Code that takes picture } } 

Creo que el problema que tengo es que la function se llama de forma recursiva demasiadas veces que obtengo "EXC_BAD_ACCESS (code = 2)". ¿Cómo puedo solucionar este problema de llamada recursiva?

Llamar a [self takePicture] que terminará [self takePicture] a intentar de inmediato , lo que es inútil y derrochador, ya que ni siquiera le das a tu aplicación time para recibir events de acelerómetro adicionales. El valor de la accelerating probablemente nunca cambiará antes de que te quedes sin stack.

Lo que probablemente quiera hacer aquí es tener el método llamado una fracción de segundo más tarde, por ejemplo

 [self performSelector: @selector(takePicture) withObject:nil afterDelay: 0.01]; return; 

Esto hará que el ciclo del evento vuelva a llamar a su método 10 milisegundos (0.01 segundos) más tarde.

Una mejor manera potencial de implementar esto sería anulando al progtwigdor para acelerar a algo como esto:

 - (void)setAccelerating:(BOOL)accelerating { _accelerating = accelerating; if (accelerating) // maybe some more conditions, but you get the idea [self takePicture]; }