objective-c - objc_release 中的 EXC_BAD_ACCESS(由于 URLByResolvingBookmarkData?)
问题描述
我正在尝试使用URLByResolvingBookmarkData
来检索存储的安全范围的书签,但我遇到了问题。
我正在使用将函数调用包装在NSAutoreleasePool
. 一切似乎都很好,除非该池被释放时,我在EXC_BAD_ACCESS
中崩溃objc_release
,特别是:
frame #0: 0x00007fff7b2d4184 libobjc.A.dylib objc_release + 36
frame #1: 0x00007fff7b2d5087 libobjc.A.dylib (anonymous namespace)::AutoreleasePoolPage::pop(void*) + 817
frame #2: 0x00007fff540aaa56 CoreFoundation _CFAutoreleasePoolPop + 22
frame #3: 0x00007fff561e7b56 Foundation -[NSAutoreleasePool release] + 144
...
我已将其缩小到这部分代码:
NSData *bookmarkData = [NSData dataWithBytes:data length:len];
NSURL *url = [NSURL URLByResolvingBookmarkData:bookmarkData
options:NSURLBookmarkResolutionWithSecurityScope
relativeToURL:nil
bookmarkDataIsStale:&bookmarkDataIsStale
error:&error];
如果我之前返回URLByResolvingBookmarkData
,或者如果我将其更改为NSURL *url = [[NSURL alloc] init]
,一切正常:可以释放池而不会崩溃。(我的意思是,它不能正常工作,因为书签没有被解析,但至少它不会崩溃。)
事实上,我有一个相同的应用程序的非沙盒构建,它在其他方面是相同的(非沙盒,它不使用这段特定的代码,所以它只是#ifdef
被淘汰了)并且运行没有问题。
我在使用中有什么明显愚蠢的事情URLByResolvingBookmarkData
吗?(我也试过initByResolvingBookmarkData
同样的效果。)
解决方案
推荐阅读
- python - 裁剪后如何转换相对边界框?
- xquery - Marklogic:如何使用正则表达式搜索文档?
- reactjs - 当开始在输入中写入时,只出现“正在加载”而不是位置下拉 - react-places-autocomplete
- c# - Unity2D“Input.GetKeyDown 不再工作
- c# - 如何在屏幕上显示数据并刷新这些数据?
- vb.net - 使用线程处理简单的任务有意义吗?
- ios - 同一应用程序的不同设备之间的供应商 ID 唯一性?
- bash - 用于计算和比较校验和的 Bash 脚本
- android - 带有连字符的深层链接重定向在 android 上不起作用
- oop - Fortran:将类型绑定过程与单独文件中的类型定义分开