基本はカスタムして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
バグは、これらのリストされたバグについても、ガベージ コレクションされた環境でのみ表示されます。メモリの問題を引き起こさずにこれを回避する方法について何か考えはありますか? これはおそらく、NSURLProtocol の下にある CF タイプが不適切にリリースされたことと関係があると思いますか?