Класс NSCountedSet
, также как и класс NSSet
предназначен для создания неупорядоченного набора объектов, но в отличие от него позволяет создавать изменяемые (mutable), не уникальные наборы. NSCountedSet
является подклассом NSSet
Класс принимает следующие протоколы (наследование от NSSet
):
- NSCoding
- NSCopying
- NSMutableCopying
- NSFastEnumeration
Класс, в дополнение к унаследованным от NSSet
, реализует методы:
-initWithCapacity:
-addObject:
-removeObject:
-countForObject:
А также переопределяет следующие методы:
-initWithArray:
-initWithSet:
-objectEnumerator:
Методы инициализации
-initWithArray:
— инициализирует созданный набор объектами из массива. Метод принимает один аргумент — массив добавляемых в набор объектов. Если в массиве объект встречается более одного раза, то в набор он будет добавлен только один раз. Каждый объект из массива, добавляемый в набор, захватывается с помощью посылки сообщения retain
. Возвращает инициализированный объект класса NSCountedSet
NSArray *myArray = [NSArray arrayWithObjects: @"one", @"two", @"three", nil];
NSSet *mySet = [[NSCountedSet alloc] initWithArray: myArray];
NSLog(@"%@", mySet);
[mySet release];
-initWithSet:
— инициализирует созданный набор объектами из существующего набора. Метод принимает один аргумент — существующий набор. Каждый объект из существующего набора, добавляемый в новый набор, захватывается с помощью посылки сообщения retain
. Возвращает инициализированный объект класса NSCountedSet
NSSet *mySet1 = [[NSCountedSet alloc] initWithObjects: @"one", @"two", @"three", nil];
NSLog(@"%@", mySet1);
NSSet *mySet2 = [[NSCountedSet alloc] initWithSet: mySet1];
[mySet1 release];
NSLog(@"%@", mySet2);
[mySet2 release];
-initWithCapacity:
— инициализирует созданный набор с указанной начальной ёмкостью. Возвращает инициализированный объект класса NSCountedSet
Добавление и удаление объектов
-addObject:
— добавляет новый объект к текущему набору. Метод принимает один аргумент - добавляемый объект. Если объект уже присутствует в наборе, то добавление не произойдет. Добавляемый объект захватывается с помощью посылки сообщения retain
.
NSMutableSet *mySet1 = [NSCountedSet setWithObjects: @"one", @"two", @"three", @"one", nil];
NSLog(@"%@", mySet1);
[mySet1 addObject:@"four"];
NSLog(@"%@", mySet1);
-removeObject:
- удаляет объект из набора. Метод принимает один аргумент - удаляемый объект
NSMutableSet *mySet1 = [NSCountedSet setWithObjects: @"one", @"one", @"two", @"three", nil];
NSLog(@"%@", mySet1);
[mySet1 removeObject:@"one"];
NSLog(@"%@", mySet1);
Подсчет объектов
-countForObject:
- возвращает количество вхождений указанного объекта в набор.
NSMutableSet *mySet1 = [NSSet setWithObjects: @"one", @"two", @"three", @"one" nil];
NSLog(@"%@", mySet1);
NSUInteger = count = [mySet1 countForObject:@"one"];
NSLog(@"%ld", count); // 2
Доступ к элементам набора
-objectEnumerator:
- возвращает объект-энумератор используемый для перебора всех элементов набора
NSSet *mySet1 = [NSSet setWithObjects: @"one", @"two", @"three", nil];
NSEnumerator *enumerator = [mySet objectEnumerator];
id obj = nil;
while ((obj = [enumerator nextObject])) {
//....
}