Почему при использовании функции «Перешагнуть» в отладчике XCode возникает проблема со слабым свойством, которое должно быть сильным

Я только что закончил отладку проблемы, где Google Map для iOS (GMSMapView) показывалось на некоторых устройствах и в некоторых симуляторах версии iOS, но не на других. Было странно, что он работал на 32-битном устройстве iOS 7 и 64-битном симуляторе iOS 7, но не на других комбинациях, указывая на то, что это не было специфично для версии iOS или 64-битной, а что-то еще. Во всяком случае, тот факт, что это былоGMSMapView и может иметь странные различия в поведении на разных устройствах / симуляторах, но, возможно, это связано с вопросом, и кто-то может объяснить его в контексте.

По сути, у меня было свойство что-то вроде:

@property (weak, nonatomic)GMSMapView *myMap;

И назначал его вviewDidLoad с чем-то вроде:

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

Как упоминалось ранее, это работало на некоторых комбинациях устройства / симулятора, но не на других, что было странно. измененияmyMap отweak вstrong заставил это работать на всех комбинациях.

Я испытал какое-то странное поведение во время отладки, что затрудняло его установление. Я начал с установки точки останова на строке, которая присваивала значениеself.myMap (перечислены выше), чтобы проверить, что линия была поражена. Теперь при отладке она достигла этой точки останова, как и ожидалось. Что было странно, так этоследующее поведение различалось в зависимости от того, ударил ли яПродолжить выполнение программы или жеПереступить, Если я ударилПродолжить выполнение программы, self.myMap был ещеnil несколько строк спустя, где у меня была другая точка останова. Если я ударилПереступить а потом сразу после попаданияПродолжить выполнение программы, self.map был назначен правильно, когда была достигнута точка останова через несколько строк.

Таким образом, выполнение одной и той же программы привело к другому назначению слабого свойстваself.myMap основанный исключительно на том, ударил ли яПереступить после достижения первой точки останова. Итак, мой основной вопрос:

Почему другой прогресс через отладчик может привести к другому результату?

И я думаю, что это может или не может быть как-то связано со слабой переменной, работающей на некоторых комбинациях устройства / симулятора, но не других. Для справки, XCode 5.1.

Ответы на вопрос(1)

Ваш ответ на вопрос