I found there are at least three ways to launch an app with Mac OS X from an application.
In 10.6 and later, NSWorkspace has a method launchApplicationAtURL:options:configuration:error:
that can be used to pass arguments to the app.
There are also Launch Services functions such as LSOpenItemsWithRole
.
You could also send an AppleEvent to the Finder asking it to open something.
EDIT TO ADD: "best" is subjective, but I'd say if you can use NSWorkspace, use it. If you can't, e.g., you need to pass command-line parameters and you need to support Leopard, then use Launch Services.
By using Scripting Bridge, you can use the method activate
to launch a cocoa app. See: Scripting Bridge.