¿Por qué el uso de la función "Step over" en el depurador XCode oculta un problema con una propiedad débil que debería ser fuerte

Acabo de terminar de depurar un problema donde un Google Map de iOS (GMSMapView) mostrada en algunos dispositivos y en algunos simuladores de versiones de iOS, pero no en otros. Era extraño que se rompiera en un dispositivo iOS 7 de 32 bits y un simulador iOS 7 de 64 bits, pero no en otras combinaciones, lo que indica que no era una versión específica de iOS o específica de 64 bits, sino algo más. De todos modos, el hecho de que era unGMSMapView y tenía una variación extraña en el comportamiento entre dispositivos / simuladores puede ser algo aparte, pero tal vez esté relacionado con la pregunta y alguien pueda explicarlo en el contexto.

Básicamente, tenía una propiedad algo así como:

@property (weak, nonatomic)GMSMapView *myMap;

Y lo había estado asignando enviewDidLoad con algo como:

self.myMap = [GMSMapView mapWithFrame:CGRectMake(0.0, 0.0, self.view.bounds.size.width, self.view.bounds.size.height) camera:self.myPosition];

Como se mencionó anteriormente, esto funcionó en algunos dispositivos / simuladores combinados pero no en otros, lo cual fue extraño. CambiandomyMap deweak astrong lo hizo funcionar en todas las combinaciones.

Experimenté un comportamiento extraño durante la depuración, lo que hizo que esto fuera difícil de establecer. Comencé poniendo un punto de interrupción en la línea que asignaba un valor aself.myMap (enumerado anteriormente) para verificar que la línea estaba siendo golpeada. Ahora, al depurar, alcanzó este punto de interrupción como se esperaba. Sin embargo, lo que fue extraño es queel siguiente comportamiento difería dependiendo de si golpeabaContinuar la ejecución del programa oDar un paso. Si pegoContinuar la ejecución del programa, self.myMap era todavíanil Unas líneas más tarde, donde tuve otro punto de interrupción. Si pegoDar un paso e inmediatamente después del golpeContinuar la ejecución del programa, self.map se asignó correctamente cuando se alcanzó el punto de interrupción unas líneas más tarde.

Entonces, una ejecución del mismo programa resultó en una asignación diferente de la propiedad débilself.myMap basado únicamente en si golpeo o noDar un paso después de alcanzar el primer punto de interrupción. Entonces mi pregunta principal es:

¿Por qué una progresión diferente a través del depurador causaría un resultado diferente?

Y supongo que esto puede o no estar relacionado de alguna manera con la variable débil que funciona en algunos combos de dispositivo / simulador pero no en otros. Como referencia, XCode 5.1.

Respuestas a la pregunta(1)

Su respuesta a la pregunta