2014-05-08 35 views
0

想象一下这样的情况:递归函数或块的堆栈和堆条件?

- (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); 
    } 

    }; 

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

我会冒这个险吗?

回答

2

所有取决于你的代码和递归量。 但在任何情况下,你可以做这样的事情:

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外座返回新在并发队列中分别继续

+0

啊,好主意!谢谢! – SpaceDog

+0

很高兴hello;) –