在Objective-C中,逗号用作语句分隔符时会做什么?

时间:2010-04-06 14:49:14

标签: objective-c

我正在查看来自第三方的一些源代码,并且我反复看到一种对我来说不熟悉的语法。基本上他们用逗号分隔语句而不是分号。它编译和工作,但我不明白它在做什么。它看起来像是

if(url)[url release], url = nil;

并且他们也使用它而不是有时候

[url release], url = nil;

这里发生了什么?

3 个答案:

答案 0 :(得分:16)

在C和C ++中,逗号运算符计算左侧的东西,然后计算右侧的东西;表达式的总值是右侧的值。基本上,这允许单个表达式做两件事(左侧的那个可能是用于副作用,例如方法调用或赋值)。是的,语法与函数调用和变量声明中使用的语法有些模糊。

我更喜欢在可能的情况下使用包含多个语句的诚实块。更长,但最终更清洁。也更容易调试。

答案 1 :(得分:3)

这些是逗号分隔的表达式,从左到右进行计算,整个表达式的结果是评估的最后一个表达式。

答案 2 :(得分:2)

这是C,ObjC等 我最喜欢的 “功能”之一......

理解这个操作符可以解锁 jQuery-like.chain-able.commands 的各种可能性,并且更简洁( thoug-some-would-argue-less-readable )许多常见习语的表达。例如......

-(id)init { 
     return self != super.init ? nil : [self setProperty:@"EPIC"], 
     NSLog(@"One line inits are: %@.", _property), self;        }
  

日记➜ One line inits are: EPIC.