You can find TDC with the heads on by using a piston stop and degree wheel. In fact that's how every writeup I've ever read says to do it(Comp Cams, SHM, etc.).
Make sure the roller followers(rockers) are out of the heads and all of the valves will stay closed no matter where the crank is. This is how I've always done it, never a single problem:
Bolt heads to block(with followers removed), then bolt in cams. Point the keyways in the down position, attach timing chains in the appropriate manner(links)and sprockets. [size=10pt]Turn the motor 1/4 turn clockwise[/size], attach crank socket and degree wheel.
Then thread a piston stop into the #1 spark plug hole a little bit, not too deep. Turn the engine clockwise until the piston reaches the stop, record the number on the degree wheel. Then turn the motor in the opposite direction until it hits the piston stop again, record this number on the degree wheel. Then you want to position the degree wheel on the crank, so that the wheel reads the same number in both directions. One way to do that is to add the two #s together and then divide by two. Once you get it so that the number is the same in both directions, then you can remove the piston stop and put the motor to TDC on the wheel, this will be true TDC.
You don't have to even have to have the chains on for this, but it makes it easier because then you don't have to remove the degree wheel to put the chains on....
Any questions send PM