Well, thanks guys for all the responses, I appreciate your help (even if I was stubborn).
My experience in programming has been mainly scripting languages (PHP, JS, etc) and Java is my only real compiled language I have worked extensively in. That's why the memory management is a new thing for me. Pointers, though I havent worked much with them, I have seen before in C (I am by no means a C expert, just enough to get by)
PHP has printf() and sprint() which has similar semantics to NSLog() and similarly named functions for formatted output.
Java has System.out.printf() which has the same semantics to NSLog and printf(), and in fact while we are on the subject of java, for System.out.printf you need to use %s (string) and manually get that string by calling Object.toString() on your object? Well objective-C helps you out with the format specifier %@ , only the method that gets called is -(NSString *) description; and it gets called for you just by passing in the object (pointer).
In fact, Java should give you the same trouble when trying to shoehorn a double into an int format specifier. You'll basically just see an integer representation of either the 4 low order or high order bytes of the double (depending on the platform).
----------
That said printf() does not have the %@ format specifier, and isn't so great for most Obj-C applications unless it is command line or you open a file yourself to log to.In C, printf() has the same limitation as NSLog does: the format-specifier must match the actual type of the value. A modern C compiler has the ability to flag mismatches as warnings or errors.
Objective-C is a strict superset of plain ordinary C. That means every valid C program is also a valid Objective-C program, with the same syntax and semantics. Thus, every C type is an Objective-C type, every C function is an Objective-C function, and so on. It also means you could use printf() or fprintf(), and the stdio library, if you wanted to. You might have to figure out where the output goes, because different Xcode versions present stdout and stderr in slightly different ways (by default).