Я нашел разных людей/статей (например, этот ответ SO), предполагая, что значение указателей в Objective-C не определено, пока вы не присвоите ему что-то, Тем не менее, я нахожу на практике, что они автоматически устанавливаются на nil
еще до того, как я вызываю alloc
- для меня следующий код работает без утверждения:
NSString* foo; // 1
assert(foo==nil); // foo is nil
foo = [NSString alloc]; // 2
assert(foo!=nil); // after alloc, not nil.
foo = [foo init]; // 3
assert(foo!=nil); // still not nil
Можно ли/полагаться на это? Является ли это гарантией или я просто запускаю свой компилятор (Xcode) в каком-то режиме отладки? (Я новичок в Objective-C).
Следственный вопрос: какова правильная терминология для описания foo
в состоянии в конце строк, помеченных 1, 2 и 3? Я предполагаю, что хотя бы один из 1 и 2 их именуется "неинициализированным", а один из 2 и 3 "инициализирован", но который, и что мы называем третьим вариантом?