Работа с NSData

NSData - представляет собой объект Cocoa для работы с бинарными данными, которые после создания не могут быть изменены.

Создание объекта данных из последовательности байт

Обычно, если имеются некие данные, то объект NSData создают вызовом метода dataWithBytes:length:, в который передают указатель на данные и их размер. Объект NSData создается путем копирования заданного количества байт из переданного указателя на данные.

Если требуется создать объект данных, использующий непосредственно сам буфер данных, без копирования, то вызывается метод, содержащий NoCopy (такой как dataWithBytesNoCopy:length: или dataWithBytesNoCopy:length:freeWhenDone:). При создании таким образом объекта данных, объект данных становится владельцем указателя на данные, и освобождает его при своем освобождении. У этого способа есть ограничение, блок данных, должен быть выделен в памяти при помощи malloc. Обойти это ограничение можно с помощью метода initWithBytesNoCopy:length:deallocator:, в который передается указатель на метод, освобожающий выделенную под буфер память.

Пример создания объекта данных из указателя на данные приведен в разделе "Выполнение синхронных запросов к PostgreSQL в Mac OS X", метод dataValFromRow: Column:.

Создание объекта данных из файла или URL

Используйте методы dataWithContentsOfFile:, dataWithContentsOfURL: для создания объекта данных, загружаемых из файла или URL.

NSString *thePath = @"/d/alex/myFile.txt";
NSData *myData = [NSData dataWithContentsOfFile:thePath];

Данные методы принимают только абсолютный путь, если вы используете относительный путь к файлу, например с помощью тильды (~), то сначала приведите его к абсолютному с помощью метода stringByExpandingTildeInPath класса NSString.

Копирование объектов данных

Класс NSData поддерживает протокол NSCopying, в свою очередь NSMutableData поддерживает NSMutableCopying протокол, следовательно, чтобы скопировать объет NSData, используйте методы copy и mutableCopy соответственно.

Доступ и сравнение байт

Два простых метода bytes и length класса NSData обеспечивают основу для доступа к данным объекта, а также являются основой для остальных методов класса.

NSData предоставляет методы доступа для копирования байт из объекта данных в заданный буфер. Метод getBytes:length: копирует байты в буфер. Например, следующий фрагмент кода инициализирует объект данных, myData, из строки myString. Затем он использует getBytes:length:, чтобы скопировать содержимое myData в aBuffer.

unsigned char aBuffer[20];
NSString *myString = @"Test string.";
const char *utfString = [myString UTF8String];
NSData *myData = [NSData dataWithBytes: utfString length: strlen(utfString)];

[myData getBytes:aBuffer length:20];

Для извлечения объекта данных, который содержит подмножество байтов из другого объекта данных, используйте метод subdataWithRange:. Например, следующий фрагмент кода инициализирует объект данных, data2, который содержит поддиапазон из data1:.

NSString *myString = @"macbug.ru";
const char *utfString = [myString UTF8String];
NSRange range = {2, 4};
NSData *data1, *data2;
 
data1 = [NSData dataWithBytes:utfString length:strlen(utfString)];
 
data2 = [data1 subdataWithRange:range];

Для сравнения двух объектов данных используйте метод isEqualToData:, который осуществляет побитовое сравнение объектов на совпадение.

Сохранение объектов данных

Чтобы сохранить объект данных в файл или URL используйте, соответственно, writeToFile:atomically:, writeToURL:atomically:. Данные методы обеспечивают сохранение данных в локальный файл.

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