On OS X these services are called LaunchDaemon (system-wide) and LaunchAgent (user-specific). You create a configuration which tells the system when to start, which executable to run, what to do with stdin, stdout, and stderr, which arguments to pass, and so on. Have a look at these man pages:
launchd(8) # the service controlling other services
launchctl(1) # the command to control services
launchd.plist(5) # the configuration format for services
The daemon can be written in any language that runs on OS X. So Objective-C is a typical choice for the Mac platform, but anything else from Ruby, Python, and Perl over AppleScript to plain C or C++ would do.
And no, there is no other (recommended) way to do this on the Mac. init.d
-style scripts don't work on the Mac [or on Darwin, it's UNIX layer]. Or, more precisely, there is not the infrastructure that runs them.
For more info see the Daemons and Services Programming Guide.