【问题标题】:Curly Braces in Objective-cObjective-c 中的花括号
【发布时间】:2012-09-12 12:44:32
【问题描述】:

注意:我的问题是基于检查this 及其答案。

在一些更大的方法中,有些代码你只想在一段时间内存活。一个例子:

1) 我有一个设置我的 UI 的大方法:UILabel's 大小、颜色、定位、UIView's 手势识别器等。知道了以上内容,这样做是否有意义:

- (void)setUI
{
    //setting other UI elements
    {
        // Add the Swipe Gesture to the swipeUpView
        UISwipeGestureRecognizer *swipeGestureUp = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(animeViewWithSwipeGesture)];

        swipeGestureUp.direction = UISwipeGestureRecognizerDirectionUp;
        [_swipeUpView addGestureRecognizer:swipeGestureUp];
    }

    // setting other UI elements
}
  • 根据上面的例子,这是降低应用程序内存占用的有效方法吗?
  • @autoreleasepool{}有关系吗?

【问题讨论】:

    标签: objective-c ios c curly-braces


    【解决方案1】:

    这只是简单的 C 语法。正如其他人提到的那样,您使用它来打开一个新范围。这意味着(这是 C 功能)您可以再次为堆栈变量使用相同的名称,因为它们在不同的范围内。此外,您在该范围内声明的变量将无法被外部范围访问。

    与内存占用无关,仅与代码组织有关。

    【讨论】:

      【解决方案2】:

      根据上面的例子,这是降低应用程序内存占用的有效方法吗?

      没有。他们甚至没有关系。它们也与 @autoreleasepool 无关 - 花括号的这种用法是打开新范围的普通 C 方式。

      【讨论】:

        【解决方案3】:

        花括号的作用只是定义一个新的作用域,因此你可以定义与其他外部作用域变量同名的新变量。

        @autoreleasepool{} 块非常相似,但也在开始时声明了一个自动释放池并在结束时将其排空,因此从内存占用的角度来看,它可能会更好,因为所有声明的自动释放对象都会在退出该范围时释放。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2014-04-26
          • 1970-01-01
          • 2018-05-02
          • 1970-01-01
          • 2019-01-26
          • 2014-02-16
          • 1970-01-01
          • 2012-03-31
          相关资源
          最近更新 更多