OK, just updated the draw function to improve performance even further.
I'm not going to release it though.
If I keep submitting updates it'll never actually get approved.
Before I started tonight the draw function went through every single cell on the screen and checked if it was alive. If it was alive it then drew a rectangle onto the screen for that cell.
i.e. for y from 0 to 48
for x from 0 to 32
if cellIsAlive (runs on the model)
then draw rect at (x, y).
Now it sends an x, y coord into the model and gets back a width and whether that width is alive or dead.
If it is alive it adds a rectangle starting from x, y of the width and adds width to the x value.
If it is not alive it just adds width to the x value.
When x gets to the end of the line it goes to the next line.
::EDIT::
Gah! I gave in to temptation and resubmitted my latest version. It takes it from a max of around 35GPS (Generations Per Second) to a mix of around 56-57GPS.
Considering that the maximum FPS on an iPhone is 60FPS I'm quite pleased with that

Still room for improvement though.