Obj-C中的多项任务是黑客吗?

时间:2010-01-19 21:44:51

标签: objective-c properties getter-setter

所以,我有一个带有一堆属性的类(IKImageView)。

我知道视图setProp:BOOL返回void。但是:

BOOL b = view.prop = NO;

似乎有效。如果我有一个函数f()返回一个布尔值,有人知道这是否真的在做:

[view setProp:f()];
Bool b = [view getProp];

[view setProp: f()];
Bool b = f();

BOOL TMP = f();
[view setProp: TMP];
BOOL b = TMP;

我问,因为我这样做:

BOOL b = view.hasHorizontalScroller = YES;
NSLog(@"b is %d scroll is %d", b, [view getHasHorizontalScroller]);

我得到“b是1,滚动是0”(这意味着setHasHorizo​​ntalScroller由于某种原因失败,但是b设置正确)

但:

BOOL b;
[view setHasHorizontalScroller: YES];
b = [view getHasHorizontalScroller];
NSLog(@"b is %d scroll is %d", b, [view getHasHorizontalScroller]);

我得到“b是0滚动是0”

这对我来说非常困惑。 (另外,如果有人能告诉我如何将属性设置为YES失败,但是它成功设置了b ...但是没有出现错误......

2 个答案:

答案 0 :(得分:5)

正在做

BOOL TMP = f();
[view setProp: TMP];
BOOL b = TMP;

在物业发货之前已经讨论过这个问题。有些人认为这应该是一个编译错误,以避免歧义。

最好完全避免施工。

答案 1 :(得分:0)

看起来不是一个错误。以下代码:

a.text = b.text = c.text;

生成此方法调用:

// [c text]
// [b setText:]
// [a setText:]

正如您所看到的,在此链中未调用[b text] :(