title: How to convert dispatch_data_t to NSData?
body: <p>Is this the right way?</p>
  
  <pre><code>// convert
  const void *buffer = NULL;
  size_t size = 0;
  dispatch_data_t new_data_file = dispatch_data_create_map(data, &amp;buffer, &amp;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 *
  </code></pre>
  
  <p>It is working fine. My main concern is memory leaks. Leaking data buffers is not fun. So is the NSData, the buffer and the dispatch_data_t new_data_file all fine?</p>
  
  <p>From what I can read on <a href="http://opensource.apple.com/source/libdispatch/libdispatch-187.7/dispatch/data.c" rel="nofollow noreferrer">http://opensource.apple.com/source/libdispatch/libdispatch-187.7/dispatch/data.c</a> it seems the buffer is DISPATCH_DATA_DESTRUCTOR_FREE. Does that mean it is my responsibility to free the buffer?</p>