How can I break out of two nested for loops in Objective-C?
If using goto simplifies the code, then it would be appropriate.
for (;;) { for (;;) { break; /* breaks inner loop */ } for (;;) { goto outer; /* breaks outer loop */ }} outer:;
break breaks out of one loop, but you can add a check to the outer loop which breaks when the inner breaks.
bool dobreak = false;for ( ..; !dobreak && ..; .. ) { for ( ... ) { if (...) { dobreak = true; break; } }}
The break
statement only gets you out of the innermost loop. If you don't want the added overhead in code, memory and performance of a dedicated state variable, I recommend refactoring the code out into a function or method of its own, and using return
to get out of all the loops:
void do_lots_of_work(void){ int i, j; for(i=0; i<10 ; i++) { for(j=0;j< 10; j++) { .. .. if(disaster_struck()) return; /* Gets us out of the loops, and the function too. */ } }}