Наборы символов.

Cocoa

NSCharacterSet объект представляет собой набор символов Юникода. NSString и NSScanner объекты используют NSCharacterSet объект к группе символов для операций поиска, так что они могут найти любой из определенного в наборе символов во время поиска.

Основной набор символов

Объект набора символов представляет собой набор символов Юникода. Наборы символов представлены экземплярами класса кластера. Два кластера классов, NSCharacterSet и NSMutableCharacterSet объявить программный интерфейс для неизменных и изменяемых наборов символов, соответственно. Набор неизменных символов определяется при его создании и в дальнейшем не может быть изменен. Изменяемый набор символов может быть изменен после его создания.

Объект набора символов не выполняет никаких задач, а просто содержит набор значений символов для ограничения операций над строками. NSString и NSScanner классы определяют методы, которые принимают NSCharacterSet объекты в качестве аргументов, чтобы найти любой из нескольких символов. Например, в этом фрагменте кода находит диапазок первой заглавной буквы в myString.

NSString *myString = @"some text in an NSString...";
NSCharacterSet *characterSet = [NSCharacterSet uppercaseLetterCharacterSet];
NSRange letterRange;

letterRange = [myString rangeOfCharacterFromSet:characterSet];

После этого фрагмента вызывается, letterRange.location для определения индекса первого заглавного символа, в данном примере "N" в "NSString" после вызова rangeOfCharacterFromSet:. Если первая буква "s" строки была бы "S", то letterRange.location вернуло бы 0.

Создание наборов символов

NSCharacterSet определяет методы класса, которые возвращают часто используемые наборы символов, такие как буквы (верхнего или нижнего регистра), десятичные цифры, пробелы и так далее. Эти "стандартные" наборы символов всегда неизменны, даже если они созданы, отправкой сообщения для NSMutableCharacterSet. См. раздел «Стандартные наборы символов и определения Unicode» для получения дополнительной информации о стандартных наборах символов.

Вы можете использовать стандартный набор символов в качестве отправной точки для создания пользовательского набора, делая изменяемой копию, и изменяя ее. (Вы также можете начать с нуля, создавая изменяемый набор символов с alloc и init и добавляя к нему символы.) Например, этот фрагмент создает набор символов содержащий буквы, цифры и основные знаки препинания:

NSMutableCharacterSet *workingSet;
NSCharacterSet *finalCharSet;

workingSet = [[NSCharacterSet alphanumericCharacterSet] mutableCopy];
[workingSet addCharactersInString:@";:,."];
finalCharSet = [workingSet copy];
[workingSet release];

Для определения пользовательского набора символов с использованием Юникода, используйте код, подобный следующему фрагменту (который создает набор символов, включая прогон страницы и символ разделителя строк):

UniChar chars[] = {0x000C, 0x2028};
NSString *string = [[NSString alloc] initWithCharacters:chars
                            length:sizeof(chars) / sizeof(UniChar)];
NSCharacterSet *chset = [NSCharacterSet
                            characterSetWithCharactersInString:string];
[string release];

Вопросы производительности

Поскольку наборы символов, часто принимают участие в выполнении важных операций, вы должны быть осведомлены об аспектах их использования, которые могут повлиять на производительность приложения. Изменяемые наборы символов, как правило, гораздо дороже, чем наборы неизменного характера. Они потребляют больше памяти и являются дорогостоящими, для инвертирования (операция часто выполняется при сканировании строки). Из-за этого вы должны выполнить следующие рекомендации:

  1. Создавайте как можно меньше изменяемых наборов символов, насколько это возможно.
  2. Кэшируйте наборы символов (в глобальных словарях, к примеру), а не постоянно воссоздайте их.
  3. При создании пользовательского набора, который не нужно менять после создания, сделайте неизменяемую копию окончательного набора символов для фактического использования, и утилизируйте рабочий изменяемый набор символов. В качестве альтернативы создайте файл с набором символов, как описано в разделе «Создание файлов с наборами символов» и сохраните его в основной пакет приложения.
  4. Аналогично, следует избегать архивации объектов наборов символов, вместо этого храните их в файлах наборов символов. Архивирование может привести к дублированию набора символов в разных архивных файлах, что в результате приведет к впустую использованию дискового пространства и дублированию в памяти каждого отдельно прочитанного архива.
 

Создание файлов с наборами символов

Если ваше приложение часто использует пользовательский набор символов, вы должны сохранить его определение в файле ресурсов и загружать, вместо явного добавления отдельных символов каждый раз как вам нужно создавать набор. Вы можете сохранить набор символов, получив его растровые представления (объект NSData) и сохранить этот объект в файле:

NSString *filename;    /*Предположим, что уже существует. */
NSString *absolutePath;
NSData *charSetRep;
BOOL result;
absolutePath = [filename stringByStandardizingPath];
charSetRep = [finalCharSet bitmapRepresentation];
result = [charSetRep writeToFile:absolutePath atomically:YES];

По соглашению, имена файлов наборов символов используют расширение .bitmap. Если вы собираетесь использовать Ваш набор символов другими файлами, вы должны следовать этому соглашению. Для чтения файлов набор символов с .bitmap расширением, просто используйте метод characterSetWithContentsOfFile:.

 

Стандартные наборы символов и определения Unicode

Стандартные наборы символов, таких как те, что возвращает letterCharacterSet, формально определяются с точки зрения нормативных и информативных категорий установленных стандартом Юникода, такими как буквы верхнего регистра, и так далее. Формальное определение стандартного набора символов, в большинстве случаев дается как одна или несколько категорий, определенных в стандарте. Например, набор, возвращаемый lowercaseLetterCharacterSet включает в себя все символы в категории нижнего регистра, в то время как набор, возвращаемый letterCharacterSet включает в себя символы во всех категориях.

Обратите внимание, что определение категорий сами по себе могут меняться с новыми версиями Unicode стандарта. Вы можете скачать файлы, которые определяют категории с http://www.unicode.org/.

 
 
homeЗаметили ошибкукарта сайта 
   Made on a Mac