Как получить хорошее управление NSMutableDictionary, NSEnumerator, NSMutableSet? - PullRequest
1 голос
/ 18 декабря 2010

Я немного отстал в знании этих трех тем: NSMutableDictionary, NSEnumerator, NSMutableSet.Когда я хочу их использовать, мне очень тяжело, даже когда я просматриваю документацию для разработчика.

Есть ли какой-нибудь пример кода, чтобы его было понятно для всех трех тем?

Пожалуйстапомоги мне.

Спасибо, Мадан Мохан.

1 Ответ

4 голосов
/ 18 декабря 2010

Лучший способ понять это зависит от вашего предыдущего опыта. 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
}
...