I am 99% sure id cannot take a primitive, you'd have to wrap it in an NSNumber. Someone that's a little more familiar may want to chime in if this is incorrect, but id in my mind has to allow for type introspection, and primitives don't carry that sort of information.
They describe methods that can be called on any NSObject to get its Class or see if it is an object of a particular type. It's not that this is particularly dangerous at all, but runtime introspection (or reflection in some other languages) does require care.