Yes, that's the way it works....
If the loop time is less that 2 "byte-times" you can poll the receive flag each time thru the loop and get the byte(s) from the receive buffer. If the loop time is longer you need to use interrupts.

/Henrik.