From the iPhone OpenGL ES Programming Guide:
In OpenGL ES, you enable each
attribute your application needs and
provide a pointer to an array of that
data type. OpenGL ES allows you to
specify a stride, which offers your
application the flexibility of
providing multiple arrays (also known
as a struct of arrays) or a single
array with a single vertex format (an
array of structs).
Your application should use an array
of structs with a single interleaved
vertex format. Interleaved data
provides better memory locality than
using a separate array for each
attribute.
You may want to separate out attribute
data that is updated at a frequency
different from the rest of your vertex
data (as described in “Vertex Buffer
Usage”). Similarly, if attribute data
can be shared between two or more
pieces of geometry, separating it out
may reduce your memory usage.
There doesn't seem to be any preferred ordering suggested in any of the current documentation, but there was a technote (TN2230) out there on tuning OpenGL ES for the iPhone that appears to have vanished. It had the following sentence in it:
For optimal performance, interleave
the individual components in an order
of Position, Normal, Color, TexCoord0,
TexCoord1, PointSize, Weight,
MatrixIndex.
Note this this technote may have been removed because of incorrect or outdated information contained within it. I don't know that I saw much of a boost in ordering my vertex buffer objects in this way, certainly not as much as simply reducing the size of my geometry by using GL_SHORT instead of GL_FLOAT where I could.