У меня есть сомнения. Это не очевидно для меня.
Допустим, у нас есть @ свойство с именем myProperty в классе. Мы можем сделать две вещи, синтезируя это. Либо мы можем присвоить ему ivar , скажем _someIVar , либо мы можем просто опустить его, в этом случае компилятор позаботится о создании ivar то же имя, myProperty , для этого свойства. В первом случае мы можем получить доступ к свойству, используя ivar _someIVar . Во втором случае мы можем использовать ivar myProperty , который был создан для нас компилятором.
Теперь я сомневаюсь, что когда мы выталкиваем другой контроллер представления из контроллера представления, который уже находится в стеке навигации, мы используем
[self.navigationController pushViewController:newViewController animated:YES];
Поскольку navigationController является свойством, я предполагаю, что ему должен быть присвоен ivar . Есть только две возможности.
1) Во-первых, Apple имеет соглашение о присвоении имен ивару с предшествующим подчеркиванием (_) . Если это так, я могу вызвать pushViewController: animated: метод, подобный этому,
[_navigationController pushViewController:newViewController animated:YES];
2) Второй возможностью, очевидно, является ивар без подчеркивания,
[navigationController pushViewController:newViewController animated:YES];
Но компилятор не позволяет мне получить доступ к навигационному контроллеру в любом случае. Зачем? Это связано с частной собственностью или с чем-то, или я просто не понимаю Objective-C вообще?