Objective C语法差异

时间:2013-09-20 14:47:39

标签: objective-c syntax

我刚才遇到过这种语法:

[myView setFrame:({
    CGRect frame = myView.frame;
    frame.size.height = heightValue;
    frame;
})];

我不记得我在哪里看到这个,但我想知道使用它而不是经典有什么好处:

CGRect frame = myView.frame;
frame.size.height = heightValue;
[myView setFrame:frame];

3 个答案:

答案 0 :(得分:6)

前一种语法只限制frame的范围,以便在setFrame消息发送后可以回收用于创建它的临时存储。

然而,在我看来,这是为阅读代码添加精神上的努力之一,编译器几乎肯定会采用这种优化。

答案 1 :(得分:3)

它会阻止framesetFrame:调用之外的作用域,但会牺牲可读性。

答案 2 :(得分:1)

第一种语法是C语言的GNU扩展,称为Statement Expression。它与任何C标准都不兼容,所以你最好完全避免使用第二种语法,这种语法更具可读性。