EXC_BAD_ACCESS в objc_release (из-за URLByResolvingBookmarkData?) - PullRequest
0 голосов
/ 25 июня 2018

Я пытаюсь использовать URLByResolvingBookmarkData для извлечения сохраненной закладки безопасности, но у меня возникают проблемы.

Я использую стороннюю библиотеку (wxWidgets), которая упаковывает вызов функции в 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 с тем же эффектом.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...