Лучший способ понять это зависит от вашего предыдущего опыта. NSDictionary
именно так и звучит: словарь. Это означает, что, учитывая ключ (или заголовок , как в словаре), вы можете искать значение (или определение ):
Например, этот словарь дает информацию о моей собаке:
KEY VALUE
-------------------------------------------
@"name" @"tucker"
@"species" @"canis lupus familiaris"
@"favorite" @"biscuits"
Со словарем dogInfo
, содержащим эту информацию, мы могли бы отправить [dogInfo objectForKey:@"name"]
и ожидать получения @"tucker"
.
Разница между NSDictionary
и NSMutableDictionary
заключается в том, что последний допускает изменения после инициализации. Это позволяет вам делать такие вещи, как [dogInfo setObject:@"fetch" forKey:@"game"]
. Это полезно для поддержания состояния, запоминания ссылочно-прозрачных запросов и т. Д.
NSSet
- это способ иметь кучу объектов с несколькими важными битами: у этих объектов нет определенного порядка, и каждый объект может быть только один (без дубликатов). Используйте NSSet
для случаев, когда вам нужно содержать уникальные неупорядоченные объекты. NSMutableSet
- это вариант NSSet
, который позволяет вносить изменения (например, добавлять или удалять объекты) после инициализации.
NSEnumerator
немного сложнее, но вам обычно не придется иметь дело с этим, если вы не пишете свои собственные библиотеки, не кодируете архаично или не выполняете сложные перечисления. Подклассы NSEnumerator
используются классами коллекций, такими как NSDictionary
, NSArray
и NSSet
, чтобы позволить перечислять их объекты. Обычно вы просто перечисляете их, используя foreach
-loop, поскольку все они реализуют <NSFastEnumeration>
. Но иногда вам захочется сделать более конкретные вещи, например перечислить объекты (а не ключи) словаря, или выполнить обратное перечисление по массиву. Именно здесь вам пригодятся экземпляры NSEnumerator
(обычно определяемые как свойства объектов вашей коллекции).
Обновление
Джастин в комментариях указал, что NSEnumerator
соответствует <NSFastEnumeration>
; это означает, что у вас практически нет шансов узнать, как использовать NSEnumerator
; вы можете просто сделать цикл foreach
над самим перечислителем, вот так:
for (id object in [dogDict objectEnumerator]) {
// doing something with the object, disregarding its key
}