作者热门文章
- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
这是正确的方法吗?
// convert
const void *buffer = NULL;
size_t size = 0;
dispatch_data_t new_data_file = dispatch_data_create_map(data, &buffer, &size);
if(new_data_file){ /* to avoid warning really - since dispatch_data_create_map demands we care about the return arg */}
NSData *nsdata = [[NSData alloc] initWithBytes:buffer length:size];
// use the nsdata... code removed for general purpose
// clean up
[nsdata release];
free(buffer); // warning: passing const void * to parameter of type void *
它工作正常。我主要担心的是内存泄漏。泄漏数据缓冲区并不好玩。那么 NSData、buffer 和 dispatch_data_t new_data_file 都可以吗?
根据我在 http://opensource.apple.com/source/libdispatch/libdispatch-187.7/dispatch/data.c 上可以阅读的内容缓冲区似乎是 DISPATCH_DATA_DESTRUCTOR_FREE。这是否意味着释放缓冲区是我的责任?
最佳答案
自 iOS 7 和 macOS 10.9 ( Foundation Release Notes ) dispatch_data_t
是 64 位应用程序中的 NSObject ( NSObject <OS_dispatch_data>
)。
dispatch_data_t
现在可以自由转换到NSData *
,虽然反之亦然。
关于ios - 如何将 dispatch_data_t 转换为 NSData?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9152851/
我是一名优秀的程序员,十分优秀!