Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Objective-C中,逗号用作语句分隔符时做什么?_Objective C - Fatal编程技术网

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

在Objective-C中,逗号用作语句分隔符时做什么?,objective-c,Objective C,我查看了一些来自第三方的源代码,并且反复看到了一种对我来说是新的语法。基本上,它们用逗号而不是分号分隔语句。它可以编译并工作,但我不明白它在做什么。看起来是这样 if(url)[url release], url = nil; 他们有时也会在没有if的情况下使用它 [url release], url = nil; 这是怎么回事

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

if(url)[url release], url = nil;
他们有时也会在没有if的情况下使用它

[url release], url = nil;

这是怎么回事
我更喜欢在可能的情况下使用包含多个语句的诚实块。更长,但最终更干净。也更容易调试。

这些是逗号分隔的表达式,从左到右求值,整个表达式的结果是最后一个求值的表达式。

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

理解这个操作符可以打开jQuery-like.chain-able.commands的各种可能性,以及许多常见习惯用法的更简洁(有些人认为可读性较差)的表达方式。。例如

-(id)init { 
     return self != super.init ? nil : [self setProperty:@"EPIC"], 
     NSLog(@"One line inits are: %@.", _property), self;        }
日志➜ <代码>单行初始化为:EPIC。


我完全同意多纳尔的观点,尤其是在这方面。在这里不使用块只是懒惰和难以阅读。谢谢。我一定要避免在我自己的代码中使用它。我很高兴知道你现在能做到。可能在其他地方有用。完全同意Donal使用多个语句而不是这种语法。这在这种情况下没有用,只会使它更难阅读。它可能有用的地方是,如果某个赋值必须发生在具有一个释放的两个变量上,比如:var1=[var2 release],var2=nil;但即使在这种情况下,一个块也会使它更干净、更易于阅读和调试。同意第一个示例的不确定性,但第二个示例在dealloc实现中并不是那么糟糕,尽管分号而不是逗号也可以做同样的事情。我发现阅读一长串的发行版比较容易,因为你没有交替的行来做两件不同的事情。从语义上讲,释放一个对象并将其设置为nil就像是一个单独的操作(或者如果你想避免僵尸,应该这样做)。我个人觉得它很难阅读,而且没有必要。但这只是我的观点。我是许多此类“耳光攻击”的臭名昭著的目标。。。但是,唉,很多人都尝试过,而且大多数都失败了——在“像这样”的事情上打我一巴掌,叹气。为了清晰和简单,我建议避免编写这样的init方法。