A: 

Most likely, you're failing to retain some object somewhere along the way. When an object gets released and then the memory is re-used for something else, you'll get all sorts of bad behavior, including crashes, or mysterious "disappearance" of other objects.

One thing you can try is putting breakpoints into the -dealloc method of your custom classes. Then you can see where they're getting deallocated from. Most likely though, this will end up being when the AutoreleasePool gets drained, which won't tell you much.

Alternatively, look into using some of the memory debugging tools built into Cocoa.

That document is for Mac OS X, but I think most all of this will work in the iPhone simulator, at least. I know that your bug "doesn't happen" in the simulator, but that really only means that the symptoms are different, and you're not noticing them.

Mark Bessey
+1  A: 

If you haven't already done so, I'd recommend turning on NSZombie support and seeing if you're using any of your objects after they've been freed. As far as I know this can be turned on in the simulator and on the device.

Ashley Clark
A: 

Thanks for all your answers. It's now fixed.

For those interested I'd forgotten to add a cellidentifer in the XIB of my cell subclass.

cellForRow: method was therefore creating a new cell every time. The memory got filled up very quick. It then seemed as though my app was automatically trying to cut the fat by forcing another tableView out of editing mode and not managing my instances properly.

Again it's a memory problem. Isn't this always the case!?!

The clue was a one off 101 error in the console indicating my app was using too much memory. Oh and a slow scrolling tableView.

Dan Morgan