What's the difference between NSNumber and NSInteger? Are there more primitives like these that I should know about? Is there one for floats?
NSNumber
is a class, not a primitive, and is used when you need to put raw numbers into dictionaries, arrays, or otherwise encapsulate them. NSInteger
, NSUInteger
, CGFloat
, etc are simple types and correspond (on 32-bt systems like the iPhone) to int
, unsigned int
and float
.
As a general rule, if you need to store a number somewhere, use NSNumber
. If you're doing calculations, loops, etc, use NSInteger
, NSUInteger
or CGFloat
.
You can wrap an NSInteger
into an NSNumber
:
NSNumber *aNumber = [NSNumber numberWithInteger:21];
... and get it back:
NSInteger anInteger = [aNumber integerValue];
You can find out more info here: http://iosdevelopertips.com/cocoa/nsnumber-and-nsinteger.html