2016-05-05 3 views
1

Когда мой WKWebView подкласс (MyWKWebView) dealloc s, он выходит из строя таким образом:WKWebView подклассов падает на dealloc

2016-05-05 15: 40: 08,814 MYAPP [15559: 202920] - [MyViewController dealloc] : В MyViewController dealloc objc [15559]: Невозможно сформировать слабую ссылку на экземпляр (0x7f9db7f0dbf0) класса MyWKWebView. Возможно, что этот объект был высвобожден или находится в процессе освобождения.

У меня нет слабых ссылок на MyWKWebView, но сам MyWKWebView держит слабую ссылку на мой UIViewController подкласса (MyViewController), которому принадлежит MyWKWebView.

Мысли?

ответ

2

По-видимому, важная деталь, которую я не понимал: мой подкласс WKWebView (MyWKWebView) соответствует UIScrollViewDelegate. (Я пытаюсь сделать WKWebView API совместимы с UIWebView, так что я могу легко поменять их между iOS7 и более поздними версиями.)

Это важно, потому что WKWebView уже соответствует UIScrollViewDelegate, хотя он не говорит об этом в the header:

#if TARGET_OS_IPHONE 
WK_CLASS_AVAILABLE(10_10, 8_0) 
@interface WKWebView : UIView 
#else 

Однако, если вы посмотрите в WKWebViewInternal.h header, мы видим подозрительную категорию:

@interface WKWebView() WK_WEB_VIEW_PROTOCOLS 

и если смотреть дальше в файле, мы видим, что WK_WEB_VIEW_PROTOCOLS является <UIScrollViewDelegate> на прошивке:

#if PLATFORM(IOS) 
#define WK_WEB_VIEW_PROTOCOLS <UIScrollViewDelegate> 
#endif 

Я не могу найти где-нибудь, что бы явно вызвать overrelease, но я, конечно, прищурив что-то в WKWebView, не позволяя его собственные UIScrollViewDelegate методов можно назвать.

Обходным путем является осуществление UIScrollViewDelegate в отдельном объекте.