我刚才遇到过这种语法:
[myView setFrame:({
CGRect frame = myView.frame;
frame.size.height = heightValue;
frame;
})];
我不记得我在哪里看到这个,但我想知道使用它而不是经典有什么好处:
CGRect frame = myView.frame;
frame.size.height = heightValue;
[myView setFrame:frame];
答案 0 :(得分:6)
前一种语法只限制frame
的范围,以便在setFrame
消息发送后可以回收用于创建它的临时存储。
然而,在我看来,这是为阅读代码添加精神上的努力之一,编译器几乎肯定会采用这种优化。
答案 1 :(得分:3)
它会阻止frame
在setFrame:
调用之外的作用域,但会牺牲可读性。
答案 2 :(得分:1)
第一种语法是C语言的GNU扩展,称为Statement Expression。它与任何C标准都不兼容,所以你最好完全避免使用第二种语法,这种语法更具可读性。