您好,我使用你的方式注册NSURLProtocol。使用的时候发现有个问题。如果ViewController关闭页面,WKWebView还在加载中,并且在ViewController dealloc中已经把WKWebView UIDelegate和navigationDelegate设为nil并stopLoading 但还是会因为已经释放,地址找不到报以下错误。
WKCustomProtocolLoader retain]: message sent to deallocated instance
详细的堆栈信息
CoreFoundation`CFRelease + 20, queue = 'com.apple.main-thread', stop reason = EXC_BAD_ACCESS (code=1, address=0x89f4e833)
frame #0: 0x2ace6dc8 CoreFoundation`CFRelease + 20
frame #1: 0x2ebcf570 WebKit`WTF::HashTable<unsigned long long, WTF::KeyValuePair<unsigned long long, WTF::RetainPtr<WKCustomProtocolLoader> >, WTF::KeyValuePairKeyExtractor<WTF::KeyValuePair<unsigned long long, WTF::RetainPtr<WKCustomProtocolLoader> > >, WTF::IntHash<unsigned long long>, WTF::HashMap<unsigned long long, WTF::RetainPtr<WKCustomProtocolLoader>, WTF::IntHash<unsigned long long>, WTF::HashTraits<unsigned long long>, WTF::HashTraits<WTF::RetainPtr<WKCustomProtocolLoader> > >::KeyValuePairTraits, WTF::HashTraits<unsigned long long> >::deallocateTable(WTF::KeyValuePair<unsigned long long, WTF::RetainPtr<WKCustomProtocolLoader> >*, int) + 36
frame #2: 0x2ebcf504 WebKit`WTF::HashTable<unsigned long long, WTF::KeyValuePair<unsigned long long, WTF::RetainPtr<WKCustomProtocolLoader> >, WTF::KeyValuePairKeyExtractor<WTF::KeyValuePair<unsigned long long, WTF::RetainPtr<WKCustomProtocolLoader> > >, WTF::IntHash<unsigned long long>, WTF::HashMap<unsigned long long, WTF::RetainPtr<WKCustomProtocolLoader>, WTF::IntHash<unsigned long long>, WTF::HashTraits<unsigned long long>, WTF::HashTraits<WTF::RetainPtr<WKCustomProtocolLoader> > >::KeyValuePairTraits, WTF::HashTraits<unsigned long long> >::rehash(int, WTF::KeyValuePair<unsigned long long, WTF::RetainPtr<WKCustomProtocolLoader> >*) + 128
frame #3: 0x2ebcf2f2 WebKit`WTF::HashMap<unsigned long long, WTF::RetainPtr<WKCustomProtocolLoader>, WTF::IntHash<unsigned long long>, WTF::HashTraits<unsigned long long>, WTF::HashTraits<WTF::RetainPtr<WKCustomProtocolLoader> > >::remove(unsigned long long const&) + 42
frame #4: 0x2ebcea54 WebKit`-[WKCustomProtocolLoader connectionDidFinishLoading:] + 96
frame #5: 0x2a939f80 CFNetwork`__65-[NSURLConnectionInternal _withConnectionAndDelegate:onlyActive:]_block_invoke + 56
frame #6: 0x2a939f3a CFNetwork`-[NSURLConnectionInternal _withConnectionAndDelegate:onlyActive:] + 182
frame #7: 0x2a93a02c CFNetwork`-[NSURLConnectionInternal _withActiveConnectionAndDelegate:] + 36
frame #8: 0x2a84f0ce CFNetwork`___ZN27URLConnectionClient_Classic26_delegate_didFinishLoadingEU13block_pointerFvvE_block_invoke + 78
frame #9: 0x2a8eb888 CFNetwork`___ZN27URLConnectionClient_Classic18_withDelegateAsyncEPKcU13block_pointerFvP16_CFURLConnectionPK33CFURLConnectionClientCurrent_VMaxE_block_invoke_2 + 60
frame #10: 0x2a83ff4c CFNetwork`RunloopBlockContext::_invoke_block(void const*, void*) + 60
frame #11: 0x2acf1e2c CoreFoundation`CFArrayApplyFunction + 36
frame #12: 0x2a83fe06 CFNetwork`RunloopBlockContext::perform() + 182
frame #13: 0x2a83fccc CFNetwork`MultiplexerSource::perform() + 216
frame #14: 0x2a83fb60 CFNetwork`MultiplexerSource::_perform(void*) + 48
frame #15: 0x2ada6d56 CoreFoundation`__CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 14
frame #16: 0x2ada61f8 CoreFoundation`__CFRunLoopDoSources0 + 364
frame #17: 0x2ada47cc CoreFoundation`__CFRunLoopRun + 772
frame #18: 0x2acf23c0 CoreFoundation`CFRunLoopRunSpecific + 476
frame #19: 0x2acf21d2 CoreFoundation`CFRunLoopRunInMode + 106
frame #20: 0x320f00a8 GraphicsServices`GSEventRunModal + 136
frame #21: 0x2e301fa0 UIKit`UIApplicationMain + 1440
* frame #22: 0x0027e04c **`main(argc=1, argv=0x008bda4c) + 106 at main.m:14
frame #23: 0x38b16aae libdyld.dylib`start + 2