我有一个疑问,对我来说并不明显。
假设我们在一个类中有一个名为myProperty的@property。在合成它时,我们可以有两种选择。一种是将一个名为_someIVar的ivar分配给它,或者我们可以仅仅省略它,在这种情况下编译器会帮我们创建一个同名的ivar,即myProperty。在第一种情况下,我们可以使用ivar_someIVar访问该属性。在第二种情况下,我们可以使用由编译器为我们创建的ivarmyProperty。
现在我的疑问是,在从已经在导航堆栈中的视图控制器推送另一个视图控制器时,我们使用以下代码:
[self.navigationController pushViewController:newViewController animated:YES];
作为一个属性,我认为navigationController应该有个ivar与之对应。只有两种可能: 1)苹果公司的约定是使用下划线(_)作为变量名前缀。如果是这样的话,我可以这样调用pushViewController:animated:方法:
[_navigationController pushViewController:newViewController animated:YES];
第二种可能性显然是没有下划线的ivar。
[navigationController pushViewController:newViewController animated:YES];
但是编译器不允许我以任何方式访问navigationController。为什么?这与私有属性相关还是我根本不理解Objective-C?