This probably depends on how you set up the multi language site, but I set it up so that you have pages with duplicates of each field for each available language. For example, a page could normally have one title field and one text area, which in a multi language site with 3 languages would mean you have three fields for title and three text areas for the page, that is one for each language.
It might be that some pages lack a translation in a certain language. That is, the page would exist, but for the particular language the fields would be empty. If you want to iterate through these pages you need to set up a loop that checks if a translation exists for each page, and if it doesn't exist, skip to the next page amongst its siblings.
Now, the complexity comes of the fact that there might be a variable amount of siblings (they might be blog posts for example) where it is not known which texts have translations in which languages. So, if you want to display e.g. the 5 most recent posts in any given language, "limit=5" wouldn't cut it, since it would fetch the 5 first pages, regardless if they have translations or not.
Therefore ->eq($i) is a better solution seeing how this one handles only one page at a time. As such a loop can be constructed that would include e.g. the 5 latest blog posts that indeed have been translated. However, since ->eq() relies on ->children(), it means the backend process needs to first include all siblings in the array (unlike when using "limit=$limit"), which wouldn't be optimal, especially if there are a lot of siblings.
In practical terms, I'm not sure if this actually can cause issues even with moderate traffic. But, it would be interesting to see if there is an optimal way to do this that I haven't thought of.