@deeniri :
dealloc is called automatically when the retainCount of an object reaches zero. When you replace a scene, the old scene receives a release message from the director, and since you didn't explicitly retain the scene, its retainCount reaches zero and its dealloc method gets called.
For my clarification, when I call [self addChild:[myLayer node] z:1]; from the init method in my scene's implementation (which is implemented in the same class file as myLayer node's implementation), does that bind myLayer node to scene node in such a way that my scene node is released when dealloc is called from myLayer node?
The other way around : your myLayer node receives a release message from your scene when the scene is dealloc'd. And again, if your layer wasn't explicitly retained by you in your code, its retainCount reaches zero and therefore its dealloc method gets called.