There is no specific limit. One prerequisite for dictionaries is that the key must conform to the NSCopying protocol. When you insert a key-value pair into a dictionary, the dictionary makes a copy of the key object to ensure that it does not mutate while inside the dictionary. It uses the key object's hash value to determine where to order it internally. If the object mutated while it was in the dictionary, it would throw the ordering off and the dictionary wouldn't work, so that's why the dictionary makes a copy (although as an optimisation, when immutable objects such as NSString are asked for a copy, it could simply increase the retain count and return itself, but this is an implementation detail).
Since keys must conform to the NSCopying protocol, it means you can use a number of objects as keys to a dictionary, including NSArray, NSData, etc. Do not worry about performance of using large strings in NSDictionary collections unless you have discovered that this is actually a bottleneck.