In Objective-C most things that get passed around inherit from NSObject. Because of this when you want to add a primative type to an array or dictionary you need to wrap it in an NSObject, usually an NSNumber. If you have specifically set an NSNumber's value/type you can easily just use intValue, floatValue etc etc to pull out which ever type you put back in, but how do you know which type should be pulled out if your code is dynamic and uses any type of NSNumber.
Many times during development I have needed to attach simple user info to objects in Objective-C, such as a table row, context info and other object pointers. Previously to achieve this I would subclass my target object’s class and add the variables needed to hold the extra information. This worked, but had a couple of problems.