我可以创建一个引用内存中 NSData 的 NSURL 吗?

2023-12-30

的文档NSURL https://developer.apple.com/library/ios/documentation/Cocoa/Reference/Foundation/Classes/NSURL_Class/Reference/Reference.html声明:

NSURL 对象代表一个可能包含以下内容的 URL 远程服务器上资源的位置、本地文件的路径 磁盘,甚至任意一段编码数据.

我有一堆内存数据,我想将其交给想要通过加载资源的库NSURL。当然,我可以先写这个NSData到临时文件,然后创建一个file:// NSURL从那以后,但我更喜欢让 URL 直接指向内存中已经存在的缓冲区。

上面引用的文档似乎表明这是可能的,但我找不到任何如何完成它的提示。我错过了什么吗?


NSURL支持 data:// URL-Scheme (RFC 2397 https://www.rfc-editor.org/rfc/rfc2397).
该方案允许您以以下形式构建 URL

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

一个有效的 Cocoa 示例是:

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

由于 Base64 编码的性质,传递具有数据 URL 的大型二进制 blob 可能会有点低效。

您还可以实现自定义NSURL协议 https://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/NSURLProtocol_Class/Reference/Reference.html专门处理您的数据。 Apple 有一些示例代码,使用自定义协议来传递图像对象:https://developer.apple.com/library/mac/samplecode/SpecialPictureProtocol/Introduction/Intro.html#//apple_ref/doc/uid/DTS10003816 https://developer.apple.com/library/mac/samplecode/SpecialPictureProtocol/Introduction/Intro.html#//apple_ref/doc/uid/DTS10003816

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我可以创建一个引用内存中 NSData 的 NSURL 吗? 的相关文章

随机推荐