【问题标题】:stack and heap condition on recursive function or block?递归函数或块的堆栈和堆条件?
【发布时间】:2014-05-08 22:59:33
【问题描述】:

想象一下这样的情况:

- (void)doSomethingWithView:(UIView)view {
   for (UIView *oneView in view.subviews) {
      [self doSomethingWithView:oneView];
   }
}

或类似的块

  void (^doSomething)(NSArray *numbers);

  doSomething = ^void(NSArray *numbers){

    // ... bla bla
    if (condition) {
      doSomething(numbers);
    }

  };

在堆栈和堆方面会发生什么?我的感觉是块/函数可能会在堆栈和堆上生成很多东西,这些东西永远不会释放到应用程序在没有内存的情况下崩溃的程度。

我会冒这个风险吗?

【问题讨论】:

    标签: ios objective-c cocoa heap-memory stack-memory


    【解决方案1】:

    一切都取决于您的代码和递归数量。 但无论如何,您都可以这样做:

    void (^doSomething)(NSArray *numbers);
    
      doSomething = ^void(NSArray *numbers){
    
        // ... bla bla
        if (condition) {
          dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0ull), ^{
              doSomething(numbers);
          });
        }
    };
    

    在这种情况下,您再次启动该块,但由于您正在使用dispatch_async外部块返回新块继续 分别在并发队列中。

    【讨论】:

      猜你喜欢
      • 2023-03-27
      • 2018-09-24
      • 2014-01-17
      • 2017-09-12
      • 2017-10-20
      • 1970-01-01
      • 2020-08-27
      • 1970-01-01
      相关资源
      最近更新 更多