ios - 如何将 dispatch_data_t 转换为 NSData?

标签 ios c grand-central-dispatch nsdata dispatch

这是正确的方法吗?

// 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/

相关文章:

c - 如何在C中将arp地址添加到/proc/net/arp

C:#include 中的前缀

ios - 按频率列出数组中的对象,最常出现在最前面

ios - 处理背景图像的不同 iphone 屏幕尺寸/分辨率

c - 什么是 `S_ISREG()` ,它有什么作用?

API 响应关闭中的 iOS Swift 3 DispatchQueue.main.async()

ios - 如何一个接一个地执行多个异步请求

swift - 检查 Swift 3 中是否在正确的调度队列中

ios - 限制 Spritekit 游戏中 GUI 元素的比例

ios - 如何将 Objective-C App Delegate 转换为 Swift?