2014-05-08 34 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;) –