This is true, but has to be thought through very carefully in multithreaded environments where another thread might remove an object from a collection, causing it to be deleted while you're still looking at it. Safe looping then requires locks or cloning the collection (which is suddenly more expensive because it will hit all the contents' ref counts).
In summary, safe and efficient multithreaded code is never easy.
In summary, safe and efficient multithreaded code is never easy.