Первый код и выход:ObjectiveC: Странное поведение при использовании NSString и __weak с ARC
NSString *text = @"Sunny";
__weak NSString *string0 = text.lowercaseString;
__weak NSString *string1;
string1 = text.lowercaseString;
NSLog(@"%@, %@", string0, string1);
Выход:
(null), sunny
Но после того, как я двигаюсь декларацию о string1
над text
, выход отличается , Вот код:
__weak NSString *string1;
NSString *text = @"Sunny";
__weak NSString *string0 = text.lowercaseString;
string1 = text.lowercaseString;
NSLog(@"%@, %@", string0, string1);
Выход:
sunny, sunny
Я очень спутать с другим выходом:
- Почему
string0
иstring1
отличается в первом случае? - Почему выход второго корпуса отличается от первого?
Еще более странным является то, что первая схема дает правильный вывод, если вы запускаете, сохраняя точку останова, а затем выполняете строчную линию. Однако, если вы удаляете контрольную точку, она дает «null». – Gandalf