Whatever you go with (and I wouldn't use the longer code in the original post) make sure it is clear what you are doing. When you pick up the code a year later, you shouldn't have to stare at it for 10 minutes to work out what it is doing. Comments will probably help here.
Unrolling a loop is generally faster (aka more time efficient) but bulky (aka less space efficient).
Realizing this is posted on an Arduino forum I would agree with that, but ..., on another (non Atmel) architecture that wouldn't necessarily be true and in fact may be wrong!
EDIT: Either way the loop will generally be easier to read and follow. I would likely let the loop stand and see if the compiler can be asked to massage the code as appropriate for target architecture.
lloyddean:
Nick Gammon's comment was aimed at my example just in case that wasn't clear to you!
I was actually thinking of:
digitalWrite(led, !(i&1));
With all due respect to Udo Klein.
In fact since digitalWrite is supposed to be sent HIGH or LOW, it really should be:
digitalWrite (led, (i & 1) ? LOW : HIGH); // toggle LED each iteration through the loop
As for unrolling the loop, these processors are rather short of program memory, so whether or not that was warranted would depend on whether you wanted to save space or time.
There was a thread not that long ago where someone "unrolled the loop" to speed up sending data out the SPI port as fast as possible. I showed that there was no point, as there was a delay anyway (17 clock cycles) before you could send more data, so the time saved in unrolling the loop did not actually give any benefit (the loop could be executed in under 17 clock cycles).
And as others have pointed out, if you are building in a delay of 1000 mS anyway, trying to save time is rather pointless.