在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名称可以重用
有什么不利之处,或者这是否是标准做法? 我们是否应该从现在开始这样做?
- 以编程方式创builduiTabBarController
- tableView在执行didSelectRowAtIndexPath之前由于一个gestureRecognizer而隐藏
- 大多数内存有效的方式来保存在iPhone上的照片到磁盘?
- 有没有一种不同的方法来绑定MvvmCross 3.0.14中的iOS ICommands?
- CAGradientLayer不工作
- 在ObjectiveC中连接audio缓冲区
- NSData dataWithContentsOfFile返回null
- 由于Facebook SDK和Flurry SDK中的advertisingIdentifier而被拒绝的应用程序
- 当使用UIDocumentInteractionController时碰撞“在Instagram中打开”