If you are writing new Cocoa code and targeting Mac OS X 10.5, use Objective-C garbage collection.
If you are writing some code that may also need to run on the iPhone, you can write and test that code for both models very easily by keeping that code in a separate framework, writing it with property -retain
and -release
use, and setting both your framework and your unit test target for it to GC-supported rather than GC-only.
Xcode will run your unit test bundle twice, once with GC on and once with GC off, and your framework will be usable under both execution models. Then if you eventually want to bring that model-level code to the iPhone, you can put it in an iPhone-targeted static library or include it directly in your iPhone project.
Regardless of whether you're considering running your code on the iPhone, though, you should definitely target garbage collection if your application will require Leopard. It will ease development and the Objective-C garbage collector performs quite well.