Warum verbirgt die Verwendung der Funktion "Step over" im XCode-Debugger ein Problem mit schwachen Eigenschaften, die stark sein sollten?

Ich habe gerade ein Problem behoben, bei dem ein iOS Google Map (GMSMapView) wurde auf einigen Geräten und in einigen iOS-Simulatoren angezeigt, andere jedoch nicht. Es war seltsam, dass es auf einem 32-Bit-iOS 7-Gerät und einem 64-Bit-iOS 7-Simulator kaputt ging, aber nicht in anderen Kombinationen, was darauf hinwies, dass es sich nicht um eine iOS- oder 64-Bit-Version handelte, sondern um etwas anderes. Wie auch immer, die Tatsache, dass es eine warGMSMapView und hatte seltsame Unterschiede im Verhalten zwischen Geräten / Simulatoren kann ein Nebeneffekt sein, aber vielleicht hängt es mit der Frage zusammen und jemand kann es im Kontext erklären.

Grundsätzlich hatte ich eine Immobilie wie:

@property (weak, nonatomic)GMSMapView *myMap;

Und hatte es zugewiesenviewDidLoad mit so etwas wie:

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

Wie bereits erwähnt, funktionierte dies bei einigen Geräte / Simulator-Kombinationen, bei anderen jedoch nicht, was seltsam war. ÄndernmyMap vonweak zustrong machte es auf allen Kombinationen arbeiten.

Ich habe beim Debuggen ein seltsames Verhalten festgestellt, das es schwierig machte, dies festzustellen. Ich habe zunächst einen Haltepunkt in die Zeile eingefügt, der einen Wert zugewiesen hatself.myMap (oben aufgeführt), um zu überprüfen, ob die Leitung getroffen wurde. Beim Debuggen wurde dieser Haltepunkt nun wie erwartet erreicht. Was aber seltsam war, ist dasDas folgende Verhalten war unterschiedlich, je nachdem, ob ich getroffen habeSetzen Sie die Programmausführung fort oderSchritt über. Wenn ich treffeSetzen Sie die Programmausführung fort, self.myMap war immer nochnil ein paar Zeilen später, wo ich einen anderen Haltepunkt hatte. Wenn ich treffeSchritt über und dann sofort nach dem TrefferSetzen Sie die Programmausführung fort, self.map wurde richtig zugewiesen, als der Haltepunkt ein paar Zeilen später getroffen wurde.

Eine Ausführung desselben Programms führte also zu einer anderen Zuordnung der schwachen Eigenschaftself.myMap basierend darauf, ob ich getroffen habe oder nichtSchritt über nach dem ersten Haltepunkt treffen. Meine Hauptfrage lautet also:

Warum führt ein anderer Verlauf des Debuggers zu einem anderen Ergebnis?

Und ich vermute, dass dies auf die schwache Variable zurückzuführen ist, die bei einigen Geräte- / Simulator-Combos funktioniert, bei anderen jedoch nicht. Als Referenz XCode 5.1.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage