gpt4 book ai didi

operating-system - 如何将NSURL转换为CFURLRef

转载 作者:行者123 更新时间:2023-12-04 08:32:04 25 4
gpt4 key购买 nike

Apple提供了用于创建PDF文档的示例代码。但是它使用CFURLRef

NSPanel savepanel提供NSURL。

我无法将NSURL转换为CFURLRef

 path = CFStringCreateWithCString (NULL, filename, kCFStringEncodingUTF8);

url = CFURLCreateWithFileSystemPath (NULL, path, kCFURLPOSIXPathStyle, 0);
NSLog(@"CFURLRef %@",url);

输出是

2016-04-22 00:34:26.648 XXX Analysis [12242:813106] CFURLRef AnalysisReport.pdf-文件:///Users/xxxxxx/Library/Containers/com.xxxxxx.xxxnalysis/Data/

转换我找到的代码
url = (__bridge CFURLRef)theFile;
NSLog(@"NSURL %@",url);

输出是

2016-04-22 00:37:20.494 XXX Analysis [12325:816505] NSURL file:///Users/xxxxxx/Documents/xxxnalysis.pdf

最后保存了PDF文件,但在NSPanel关闭时程序崩溃。

最佳答案

CFURLRefNSURL是免费电话桥接。因此,通常,您只需执行以下操作:

NSURL *url = ...;
CFURLRef cfurl = CFBridgingRetain(url);

并且当您不再需要CFURL对象时:
CFRelease(cfurl);

或者,如果您有合理的把握确定NSURL可以保留足够长的时间,则可以执行以下操作
CFURLRef cfurl = (__bridge CFURLRef)url;

如果您崩溃了,那可能意味着您过度释放了某些东西,特别是释放了您不拥有的对象。我建议阅读Apple关于对象所有权的文档:

https://developer.apple.com/library/mac/documentation/CoreFoundation/Conceptual/CFMemoryMgmt/Concepts/Ownership.html

关于operating-system - 如何将NSURL转换为CFURLRef,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36781035/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com