I was/am planning on making a full post about this because I find it incredibly useful: Clang Static Analyzer.
It's a tool utilizing LLVM/Clang which automatically finds memory leaks and other possible bugs with your code. It generates a nice HTML report for where the error occurs and how it got there.
I have found sticking to a coding standard is the single best way to prevent memory leaks. For example, always autorelease or always do the init, set, release jig, etc. However, tools like the static analyzer may find bugs you were unaware of.
website:
http://clang.llvm.org/StaticAnalysis.html
quick tutorial on setting up for iPhone development:
http://www.rhonabwy.com/wp/2008/10/...clang-static-analyzer-with-an-iphone-project/