Какие классы можно использовать в качестве ключа в NSDictionary? - PullRequest
0 голосов
/ 04 июля 2011

Можем ли мы использовать только объекты NSString в качестве ключа в NSDictionary?Как мы узнаем, какие объекты можно использовать, а какие нет?

Ответы [ 2 ]

6 голосов
/ 04 июля 2011

Из документации :

В общем случае ключом может быть любой объект (при условии, что он соответствует протоколу NSCopying), но обратите внимание, что при использовании кодирования значения ключа ключ должен быть строкой (см. «Кодирование значения ключа» Основы»).

Таким образом, вы можете использовать что угодно, кроме строк, для копирования, но они будут проблематичными с KVC. Я просто использую строки для ключей, чтобы сделать вещи безопасными, последовательными и простыми.

2 голосов
/ 04 июля 2011

Вы можете использовать все, что соответствует NSCopying. То есть вы можете использовать объекты типа id, если они соответствуют протоколу NSCoding.

В случаях, когда ключом является NSString, isEqualToString: вызывается для извлечения. В противном случае isEqual: вызывается для объекта, чтобы определить, соответствует ли ключ запрошенному ключу.

Ключ (и значение в этом отношении) не может быть nil или NULL. Однако они могут быть [NSNull null].

...