मूलभूत हैं मेरे पास कस्टम NSURLProtocol
है। startLoading
में, [self client]
प्रकार का है:जीएन पर्यावरण में कस्टम NSURLProtocol में _NSCFURLProtocolBridge में संदर्भ गणना अंडरफ़्लो से कैसे बचें
<_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.
आप देख सकते हैं किके लिए अंडरफ्लो होता है।
जब मैं 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 के नीचे सीएफ प्रकार के साथ कुछ करने के लिए अनुचित रूप से जारी किया जा रहा है?
स्टैक ट्रेस की एक तस्वीर: http://img.skitch.com/20090711-qbt4s4jq87jk4g68iaawe7h1hg.png –