在UINavigationController.h
中,我们将属性声明为
@property(nonatomic,getter=isNavigationBarHidden) BOOL navigationBarHidden;
它明确指出其getter是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
获得了相同的参考资料但寻找苹果推荐。
答案 0 :(得分:2)
问题是你要混淆财产及其吸气剂和制定者。
当您使用:self.navigationController.navigationBarHidden
时,您直接引用该属性,这意味着编译器将根据" =&#的位置查看调用getter或setter的方法。 34;登录。
但是当你使用[self.navigationController navigationBarHidden];
显式调用名为navigationBarHidden
的方法时,这应该抛出错误,因为这样的方法不存在,相反你必须使用实际的getter name:[self.navigationController isNavigationBarHidden];
答案 1 :(得分:0)
知道了,要获得设置为navigationBarHidden的BOOL属性,您可以使用此代码....
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
self.navigationController.navigationBarHidden = YES;
//Use this line to know Navigation Bar is hidden or not....
BOOL value = self.navigationController.isNavigationBarHidden;
}
答案 2 :(得分:0)
嘿,这里是http://rypress.com/tutorials/objective-c/properties.html的一个例子,类似于你的问题;请看一下:
如果你不喜欢@ property的默认命名约定,你可以 使用getter =和setter =更改getter / setter方法名称 属性。一个常见的用例是布尔属性,其属性 吸气剂通常以前缀为前缀。尝试更改属性 Car.h中的声明如下。
@property (getter=isRunning) BOOL running;
生成的访问器现在称为isRunning和setRunning。注意 公共财产仍然被称为运行,这就是你 应该用于点符号:
Car *honda = [[Car alloc] init]; honda.running = YES; // [honda setRunning:YES] NSLog(@"%d", honda.running); // [honda isRunning] NSLog(@"%d", [honda running]); // Error: method no longer exists
这是唯一采用参数的属性(访问者 方法名称) - 其他所有都是布尔标志。