本文介绍了NSMutabledata byteswithnocopy 的问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I am trying to write a code to create NSMutableData from malloced buffer.I used freewhendone = YES
1) It gives an error in accessing the buffer after NSData is created.(in memset in below code)
2) The malloced buffer pointer and [data bytes] pointer are different.

对这些有什么解释吗?

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));

推荐答案

来自 二进制数据编程指南

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

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

立即释放缓冲区.

malloced 缓冲区指针和 [data bytes] 指针不同.

NSMutableData 创建字节副本.

这篇关于NSMutabledata byteswithnocopy 的问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

06-23 11:29