0

注意:我的问题是在检查内容及其答案后得出的。

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

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{}吗?
4

3 回答 3

2

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

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

于 2012-09-20T08:07:07.610 回答
1

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

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

于 2012-09-20T07:35:08.747 回答
0

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

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

于 2012-09-20T07:29:48.010 回答