NSMutabledata byteswithnocopy的问题

时间:2013-10-15 11:42:15

标签: iphone ios objective-c nsdata nsmutabledata

我正在尝试编写代码以从malloced buffer创建NSMutableData。我使用了freewhendone = YES
1)创建NSData后,在访问缓冲区时出错。(在下面代码的memset中)
2)malloced缓冲区指针和[数据字节]指针是不同的。

对这些有什么解释吗?

UWORD8 *rgb_buffer = malloc(u4_stride * u4_height * 3);

NSMutableData *rgbData = [NSMutableData dataWithBytesNoCopy:rgb_buffer

                                                     length:(u4_stride * u4_height * 3)

                                               freeWhenDone:YES];
memset(rgb_buffer, 0, (u4_stride * u4_height * 3));

1 个答案:

答案 0 :(得分:3)

来自Binary Data Programming Guide

  

NSMutableData响应dataWithBytesNoCopy:length:,但是复制了字节   无论如何,缓冲区立即被释放。

在创建NSData后访问缓冲区时出错。(在下面的代码中的memset中)

立即释放缓冲区。

malloced缓冲区指针和[数据字节]指针不同。

NSMutableData创建字节副本。