不久前我遇到了这种语法:
[myView setFrame:({
CGRect frame = myView.frame;
frame.size.height = heightValue;
frame;
})];
我不记得我在哪里看到的,但我想知道使用它而不是经典是否有任何优势:
CGRect frame = myView.frame;
frame.size.height = heightValue;
[myView setFrame:frame];
不久前我遇到了这种语法:
[myView setFrame:({
CGRect frame = myView.frame;
frame.size.height = heightValue;
frame;
})];
我不记得我在哪里看到的,但我想知道使用它而不是经典是否有任何优势:
CGRect frame = myView.frame;
frame.size.height = heightValue;
[myView setFrame:frame];
前一种语法只是限制范围,frame
以便可以在setFrame
消息发送后回收用于创建它的临时存储。
然而,在我看来,这是在阅读代码以进行优化时增加脑力的事情之一,编译器几乎肯定会采取这种优化方式。
它防止frame
在对 的调用范围之外setFrame:
,但以牺牲可读性为代价。
第一种语法是 C 语言的 GNU 扩展,称为Statement Expression。它与任何 C 标准都不兼容,因此最好完全避免使用第二种语法,后者更具可读性。