If you are only managing small numbers of objects, this blog post applies: https://www.scirra.com/blog/83/optimisation-dont-waste-your-time
For large numbers of objects, creating and destroying objects is actually relatively CPU-intensive: the engine has a lot of internal data structures relating to created instances which all need to be updated when objects are created and destroyed. It's not slow per-instance, but adds up to a lot of work if you are handling hundreds of objects. In this case setting invisible (or repositioning far away) can be faster, but then you have to balance that with the fact they still exist and events will therefore still test against them. Repositioning far away is good with collision cells since it removes them as candidates for collision tests. Overall I'd say if you have a very large number of objects that are constantly appearing and disappearing very quickly, implement it by repositioning them far away instead of destroying. Otherwise normal create/destroy should be fine.