在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];