UINavigationController.h中,我们将属性声明为

@property(nonatomic,getter=isNavigationBarHidden) BOOL navigationBarHidden;


它明确指出其吸气剂是isNavigationBarHidden,但我不知道为什么我可以通过navigationBarHidden访问它

- (void)viewDidAppear:(BOOL)animated {
  [super viewDidAppear:animated];

  self.navigationController.navigationBarHidden = YES;

  //Shold throw an error here but it compiles
  BOOL value = self.navigationController.navigationBarHidden;
}


知道为什么会这样吗?或者我以错误的方式解释它



编辑

我在Ry’s Objective-C Tutorial - Properties上获得了一些与此相同的参考

但寻找苹果的参考。

最佳答案

问题在于您混淆了属性及其获取器和设置器。

当使用:self.navigationController.navigationBarHidden时,直接指的是属性,这意味着编译器将根据“ =”符号的位置来查看调用getter或setter的方法。

但是,当您使用[self.navigationController navigationBarHidden];时,显式调用名为navigationBarHidden的方法,这会引发错误,因为这样的方法不存在,而必须使用实际的吸气剂名称:[self.navigationController isNavigationBarHidden];

10-08 05:44