在Objective-C中使用GCC C扩展(语句expression式)进行初始化

GNU C提供了几种在标准C中没有的语言特性。这些扩展在C和Objective-C中可用。

有一个GCC C扩展(称为语句expression式 ),如果它们也被圆括号包围,则会导致由大括号包围的语句序列返回一个值:

self.searchBar = ({ UISearchBar *searchBar = [[UISearchBar alloc] initWithFrame:({ CGRect frame = self.tableView.frame; frame.size.height = 100.0f; frame; })]; searchBar.delegate = self; searchBar; }); 

在这个构造中,括号围绕括号。 最后一个语句的值作为整个构造的值,所以我们可以将它用于初始化和赋值等等。

这个初始化结构有很多优点:

  • 清晰简洁
  • 初始化中的configuration细节
  • 范围较小
  • genericsvariables名称可以重用

有什么不利之处,或者这是否是标准做法? 我们是否应该从现在开始这样做?