Почему при использовании функции «Перешагнуть» в отладчике 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.