Can I create an NSURL that refers to in-memory NSData? Can I create an NSURL that refers to in-memory NSData? ios ios

Can I create an NSURL that refers to in-memory NSData?


NSURL supports the data:// URL-Scheme (RFC 2397).
This scheme allows you to build URLs in the form of

data://data:MIME-Type;base64,<data>

A working Cocoa example would be:

NSImage* img = [NSImage imageNamed:@"img"];NSData* imgData = [img TIFFRepresentation];NSString* dataFormatString = @"data:image/png;base64,%@";NSString* dataString = [NSString stringWithFormat:dataFormatString, [imgData base64EncodedStringWithOptions:0]];NSURL* dataURL = [NSURL URLWithString:dataString];

Passing around large binary blobs with data URLs might be a bit inefficient due to the nature of base64 encoding.

You could also implement a custom NSURLProtocol that specifically deals with your data.Apple has some sample code that uses a custom protocol to pass around image objects: https://developer.apple.com/library/mac/samplecode/SpecialPictureProtocol/Introduction/Intro.html#//apple_ref/doc/uid/DTS10003816


What you are missing is the NSURLProtocol class. Takes about three dozen lines of code, and any code that handles URLs properly can access your in-memory data. Read the documentation, it's not difficult and there is sample code available.

Unfortunately there are some APIs that take an NSURL as a parameter, but can only handle file URLs.