Подходит ли NSData для больших массивов c? - PullRequest
2 голосов
/ 05 апреля 2011

Я читаю большие изображения FITS, используя библиотеку CFITSIO для C. Сначала фактическое изображение / пиксели не считываются. Только когда необходимо выполнить какую-либо операцию (скажем, в среднем несколько изображений)изображение загружается в память в виде двойного массива.Я представляю каждое изображение как объект типа ImageListing (пользовательский класс).Этот класс знает, как читать / записывать подходящие файлы.

Для представления серии изображений я использую NSMutableArray внутри другого класса, называемого ImageStacker.ImageStacker реализует методы, которые могут усреднять, вычитать, суммировать изображения.Очевидно, что для выполнения этих операций этому классу необходим доступ к необработанным пикселям, которые он получает, отправляя сообщение returnPixelsFrom:(NSInteger)Row.

У меня вопрос, должен ли я:

1) Читатьпикселей в вышеупомянутом методе, но считайте их в массив C (типа double), который передается по ссылке.

ИЛИ

2) Должен ли я читать пиксели в локальный массив C, но затем скомпонуйте объект NSData, используя dataWithBytes:length, и верните этот объект из метода.

Какое преимущество имеет вариант 2 над 1?Имейте в виду, что при усреднении / добавлении пикселей мне все равно придется использовать массив C, поэтому не лучше ли продолжать использовать для этой цели чисто C-массивы?

1 Ответ

1 голос
/ 05 апреля 2011

Я думаю, единственная причина, по которой вы захотите использовать NSData, - это если вам нужно передать эти биты классу Какао, например NSDictionary, который не знал, как обращаться с массивом plain-C, или хотелиспользовать какао для архивации или сериализации данных.

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

...