Требуется один из -dataWithBytes:length:
или его варианты:
NSData *d = [NSData dataWithBytes:data length:lengthOfDataInBytes];
, который копирует байты, и вы можете free(data)
. Чтобы сохранить копию, предполагая, что data
выделено с использованием malloc
, используйте:
NSData *d = [NSData dataWithBytesNoCopy:data length:lengthOfDataInBytes];
Вы должны не вызывать free
в вашем буфере в этом случае, поскольку экземпляр NSData
освободит его для вас.
Обратите внимание, что все эти методы возвращают экземпляр autoreleased
, поэтому вам, вероятно, придется сохранить его, если вы хотите сохранить его между потоками (и не используете GC). Вместо этого вы можете использовать эквивалентные alloc
/ initWithBytes:...
инициализаторы.
Чтобы получить указатель на содержимое NSData, используйте bytes
.
(я думаю, что несколько минут с документацией NSData
вам пригодятся)