A single CMBody only represents a single object in the physics world. Where you create the instance doesn't really matter as long as you add it to the space.
From what i understand is that you have difficulty reaching the CMSpace class from inside the various classes. This would either mean that you need to pass along the CMSpace to every instance or put the CMSpace in a singleton which enables you to reach it from anywhere.
You only need to have the CMSpace to create a CMBody, once you have created the CMBody you don't need the CMSpace to add it to the space since CMBody keeps a reference to it. (this doesn't mean you can dealloc CMSpace since it is still vital):
CMSpace *mSpace = [[CMSpace alloc] init]; [mSpace setSleepTimeThreshhold:5.0f]; [mSpace setIterations:25]; CMBody *squareBody = [mSpace addBodyWithMass:5 moment:0]; // <!-- Only needed for creating the CMBody [squareBody setPositionUsingVect:position]; [squareBody addToSpace];