Objective c 目标C语法差异

Objective c 目标C语法差异,objective-c,syntax,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]; 前一种语法只是

我不久前遇到过这种语法:

[myView setFrame:({
    CGRect frame = myView.frame;
    frame.size.height = heightValue;
    frame;
})];
我不记得在哪里看到过这个,但我想知道使用它而不是经典是否有什么好处:

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

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


然而,在我看来,这是在阅读优化代码时增加脑力的事情之一,编译器几乎肯定会采取任何方式。

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


然而,在我看来,这是为编译器几乎肯定会采取的优化而阅读代码时增加脑力的事情之一。

它防止了框架在调用setFrame:之外的范围,但以牺牲可读性为代价

它防止在调用setFrame:之外对框架进行范围限定,但以牺牲可读性为代价

第一种语法是对C语言的GNU扩展,称为。它与任何C标准都不兼容,因此最好避免使用第二种语法,因为它可读性更好。

第一种语法是C语言的GNU扩展,称为。它与任何C标准都不兼容,因此最好避免使用第二种语法,因为第二种语法可读性更强。

既然代码中有块浮动,那么这种构造看起来就不那么奇怪了。但是,如果框架变量真的必须受到如此强烈的保护,以防被同一方法的其他部分覆盖,那么该代码可能需要一次检查。不知何故,既然代码中有块浮动,那么这种构造看起来就不那么奇怪了。但是,如果frame变量真的必须得到很强的保护,以防被同一方法的其他部分覆盖,那么该代码可能需要一次检查。