关于readonly财产目标的3个问题c

时间:2012-09-23 15:49:05

标签: objective-c

我一直试图绕过readonly属性,我可以对我写的一些代码进行一些澄清。我的标题中有一个@property (nonatomic, readonly) BOOL test;,我在我的.m

中写了这个
-(BOOL)test{
    test = (a == b) && (b < c);
    return test;
}

if (self.test) {
    NSLog(@"a is less than c");
}
else {
    NSLog(@"a is equal or greater than c")
}

所以基于此我有几个问题。当我编译它时,它已经知道test是对的?我不必在[self test]viewDidLoad权限中写init?为什么在if语句中它必须是self.test而不仅仅是测试。在测试方法中我可以返回更多然后只是测试吗?我可以返回测试,然后在下面写下它返回test1然后返回test 2如果它们都是BOOL的那么?

2 个答案:

答案 0 :(得分:0)

-(BOOL)test{
    test = (a == b) && (b < c);
    return test;
}

在这种情况下,test只是一个局部变量,用于保存您正在计算的值。它不是在函数之外使用的,它的名称并不重要。您可以在方法中将test替换为foo,它仍然有效。

if (self.test) {
    NSLog(@"a is less than c");
}
else {
    NSLog(@"a is equal or greater than c")
}

在这种情况下,您正在调用self.test,因为test不是类中的变量,它是一个属性,其值由方法返回。这就是为什么你打电话给财产而不只是test,因为没有test变量,只是一个属性。

答案 1 :(得分:0)

  

当我编译它时,它已经知道什么测试是正确的?

好吧,编译器会知道你声明了一个属性test

  

我不必在viewDidLoad或init中写[self test]吗?

没有

  

为什么在if语句中它必须是self.test而不仅仅是test?

这是因为你声明了一个属性test。要访问底层的ivar _test,您必须使用它的访问器,或直接访问_test,假设您已经合成它,或者您正在使用能够自动合成的Xcode版本。

  

在测试方法中我可以返回更多然后只是测试吗?

您可以在test的getter方法中返回您喜欢的任何内容。当然,按照惯例,你会返回属性的支持ivar。

  

就像我可以返回测试然后在它下面写[sic]返回test1然后如果它们都是BOOL那么返回测试2?

不,getter方法需要返回与声明的属性相同的类型。

我认为你应该阅读声明的属性,如何使用它们以及它们与实例变量的关系。