Objective c 多重分配是Obj-C中的一种攻击吗?
所以,我有一个类(IKImageView),它有一系列属性 我知道setProp:BOOL返回void的视图。然而:Objective c 多重分配是Obj-C中的一种攻击吗?,objective-c,properties,getter-setter,Objective C,Properties,Getter Setter,所以,我有一个类(IKImageView),它有一系列属性 我知道setProp:BOOL返回void的视图。然而: BOOL b = view.prop = NO; 似乎有效。如果我有一个返回布尔值的函数f(),有人知道这是否真的是: [view setProp:f()]; Bool b = [view getProp]; 或 或 我这样问是因为当我这样做的时候: BOOL b = view.hasHorizontalScroller = YES; NSLog(@"b is %d scro
BOOL b = view.prop = NO;
似乎有效。如果我有一个返回布尔值的函数f(),有人知道这是否真的是:
[view setProp:f()];
Bool b = [view getProp];
或
或
我这样问是因为当我这样做的时候:
BOOL b = view.hasHorizontalScroller = YES;
NSLog(@"b is %d scroll is %d", b, [view getHasHorizontalScroller]);
我得到“b是1,scroll是0”(这意味着setHasHorizontalScroller由于某种原因失败,但b设置正确)
但是:
我得到“b是0,卷轴是0”
这让我很困惑。(另外,如果有人能告诉我如何将属性设置为“是”失败,但它成功地设置了b…但没有出现错误…它正在执行此操作。)
BOOL TMP = f();
[view setProp: TMP];
BOOL b = TMP;
在属性发布之前,有人对此进行了讨论。一些人认为这应该是一个编译错误,以避免歧义
可能最好完全避免这种构造。看起来不是bug。以下代码:
a.text = b.text = c.text;
生成此方法调用:
// [c text]
// [b setText:]
// [a setText:]
如您所见,此链中未调用
[b text]
:(请提交一个bug。最简单的例子会很有帮助。这是最简单的例子……我在系统附带的IKImageViewDemo中添加了代码……我刚刚提交了一个bug,谢谢你的建议。好吧,这至少解释了发生了什么,如果不是为什么setter失败的话……谢谢。
BOOL TMP = f();
[view setProp: TMP];
BOOL b = TMP;
a.text = b.text = c.text;
// [c text]
// [b setText:]
// [a setText:]