It is a very good practice to set any variable to some defined value before it is used. Not doing so is going to cause all kinds of problems. The rest depends a lot on the tools that you are using.
A good compiler will tell you if you are using a variable that hasn't been defined before you use it or where the compiler cannot prove that it is defined before you use it. A bad compiler (or a good compiler used by a developer who doesn't know how to use their tools properly) won't do that. With a good compiler, initialisation to nil or NULL might prevent the compiler from doing its job properly. Consider this example, where you really want the code to return an NSString that isn't nil but didn't get it right:
NSString* result;
if (condition) result = @"True";
else if (otherCondition) result = @"False";
return result;
Here the compiler can warn you because you might return an undefined result. If you initialise result to nil, you still have the same problem that you might return nil in a function that isn't supposed to return nil, but the compiler cannot warn you.
On the other hand, if the value must be nil, or if nil is an acceptable value, and you plan not to set the variable to a different value in some cases, then initialising to nil is fine and good practice.
Summary: Use a compiler and set it up properly so that it will tell you if you are using uninitialised variables. If you get a warning about uninitialsed variables, fix the problem, not the warning.