In general, you use pointers to objects. You may create your monster object in game.startGame() or game.loadLevel() method, but you keep a pointer to it. Maybe you keep an array of pointers because you have many monsters.
To make changes to the monster you make a copy of the pointer and call methods on the pointer. This is different than making a copy of the object.
Code:
// fighthandler:
Monster* closeMonster = [game findCloseMonster];
if(closeMonster!=nil){
[closeMonster subtractHealth:10];
}
The important thing here is that the pointer closeMonster is not a NEW monster object - it points to the same object returned by the flindCloseMonster method. If this doesn't make sense, read up on pointers.
EDIT: I just realized that you may not understand instance variables. Look up instance variables first - that's how you create a variable that you can use in two different methods.