Основы у меня есть на заказ NSURLProtocol
. В startLoading
, [self client]
имеет тип:
<_NSCFURLProtocolBridge> {NSURLProtocol, CFURLProtocol}
Проблема заключается в запуске этого в среде сбора мусора. Поскольку я пишу заставку, я вынужден сделать ее сборкой мусора. Однако протокол _NSCFURLProtocolBridge, кажется, всегда выдает:
malloc: reference count underflow for (memory_id_here), break on auto_refcount_underflow_error to debug
Пример дампа в консоль отладки:
ScreenSaverEngine[1678:6807] client is <_NSCFURLProtocolBridge 0x20025ab00> {NSURLProtocol 0x200258ec0, CFURLProtocol 0x20029c400}
ScreenSaverEngine(1678,0x102eda000) malloc: reference count underflow for 0x20025ab00, break on auto_refcount_underflow_error to debug.
Вы можете видеть, что потеря значения происходит для <_NSCFURLProtocolBridge 0x20025ab00>
.
Когда я включаю auto_refcount_underflow_error
, кажется, что трассировка стека возвращается до URLProtocolDidFinishLoading:
в:
id client = [self client];
...
[client URLProtocolDidFinishLoading:self];
Эта проблема, кажется, существовала некоторое время, но, кажется, нет никакого ответа в сети:
http://lists.apple.com/archives/cocoa-dev/2008/May/msg01272.html
http://www.cocoabuilder.com/archive/message/cocoa/2007/12/17/195056
Эта ошибка проявляется только в средах со сборщиком мусора и для перечисленных ошибок. Любые мысли о том, как я могу обойти это без проблем с памятью? Я предполагаю, что это, вероятно, связано с тем, что тип CF под NSURLProtocol был выпущен неправильно?