you definitely should prefix them. if there is a collision, the behaviour is undefined.
what actually happens (last i ran into this) is that the binary is loaded, but your class is not loaded if another (objc) class with that name has already loaded. i'll let you figure out which implementation you'll get when you create an instance of this class ;) such a collision will likely result in a crash or a lot of swallowed exceptions (and a non-functional app). a lot of developers use 2 uppercase letters, which is (all things being equal) 26*26 chance that they will use the same prefix. again - this has happened to me soooo.... it is best that you do it to avoid rewriting a lot of code later on.