2010-01-19 32 views
5

所以,我有一个类(IKImageView)与一堆属性。Obj-C中的多重任务是一个黑客攻击?

我知道该视图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,sc侧倾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 ...,但没有错误拿出...

+1

文件中的错误调用,请。最小的例子会非常有帮助。 http://bugreport.apple.com/ – bbum 2010-01-19 22:01:18

+0

这就是最简单的例子......我向系统附带的IKImageViewDemo添加了代码......并且我刚提交了一个bug,谢谢你的建议。 – 2010-01-19 22:16:38

回答

5

它做

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

有被运往属性之前的讨论有些人认为这应该是一个编译错误,以避免歧义

这可能是最好完全避免施工

+0

好吧,至少要解释发生了什么,如果不是为什么setter失败......谢谢。 – 2010-01-19 22:05:52

0

貌似不是一个错误,下面的代码。:

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

产生这个方法调用:

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

正如你可以看到[b text]没有这个链条:(