objc_release中的EXC_BAD_ACCESS(由于URLByResolvingBookmarkData?)

时间:2018-06-25 13:46:19

标签: objective-c wxwidgets nsurl appstore-sandbox nsautoreleasepool

我正在尝试使用URLByResolvingBookmarkData来检索存储的安全范围书签,但是遇到了问题。

我正在使用将函数调用包装在NSAutoreleasePool中的第三方库(wxWidgets)。一切似乎都可以正常工作,除了释放该池时,我在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,但效果相同。)

0 个答案:

没有答案