-2

我一直在尝试围绕 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]对吗?为什么在声明中它必须是而不只是测试。在测试方法中,我可以返回更多而不是测试吗?就像我可以返回测试然后在它下面写返回然后返回,如果它们都是布尔的?viewDidLoadinitifself.testtest1test 2

4

2 回答 2

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

在这种情况下test,它只是一个局部变量,用于保存您正在计算的值。它不在函数之外使用,调用什么也没关系。您可以在方法中替换testfoo,它仍然可以工作。

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

在这种情况下,您之所以调用它,是self.test因为test它不是类中的变量,而是一个属性,其值由方法返回。这就是为什么你调用属性而不是仅仅test因为没有test变量,只是一个属性。

于 2012-09-23T16:10:46.020 回答
0

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

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

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

不。

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

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

在测试方法中,我可以返回更多而不是测试吗?

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

就像我可以返回 test 然后在它下面写 [sic] 返回 test1 然后返回 test 2(如果它们都是 BOOL 的话)?

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

我认为您最好阅读声明的属性、它们的使用方式以及它们与实例变量的关系。

于 2012-09-23T16:10:50.393 回答