NSNumbers are really only useful when you're building an NSArray, putting keys in a dictionary (like a preference file), or other very cocoa-y things.
In those cases, Apple's functions have been set up to deal only with classes. Any function that wants a type of (id) can only be passed a class.
So the problem comes in where you need to get an integer in there. NSNumber is really just a "wrapper" around a regular int/float/double variable. So you "hide" your int inside an NSNumber and pass it to the function. The same kind of deal happens with NSStrings, which can be thought of as a simple wrapper around a standard c string.
Most of the time you'll be using regular old C/C++ style ints.
Let me know if I've completely confused you
