我正在尝试在WebView中加载网页,以便拍摄网站的快照。 WebView包含在我为此目的创建的临时窗口中。但是,在我发布WebView和临时窗口后不久,WebView就会发送另一条释放消息,而它已经被释放。这是调试器中的错误消息,NSZombieEnabled设置为YES。
*** -[WebView release]: message sent to deallocated instance 0x608000125820
我无法弄清楚导致WebView被释放的次数是多少。令它更加混乱的是,只有在加载某些URL时才会出现问题。例如:当尝试拍摄http://www.google.com
的快照时,一切都很好,但在使用http://edition.cnn.com
时,它几乎总是崩溃。
这是代码的简化版本:
@interface AppDelegate ()
@property (nonatomic, strong) NSWindow *tempWindow;
@property (nonatomic, strong) WebView *webView;
@end
@implementation AppDelegate
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
CGRect frame = CGRectMake(0, 0, 1200, 695);
self.tempWindow = [[NSWindow alloc] initWithContentRect:frame styleMask:NSBorderlessWindowMask backing:NSBackingStoreBuffered defer:NO];
self.webView = [[WebView alloc] initWithFrame:frame];
self.webView.frameLoadDelegate = self;
self.tempWindow.contentView = self.webView;
[[self.webView mainFrame] loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://edition.cnn.com"]]];
}
#pragma mark - WebFrameLoadDelegate
- (void)webView:(WebView *)sender didFinishLoadForFrame:(WebFrame *)frame
{
if (frame != [sender mainFrame]) {
return;
}
// take snapshot here...
[self takeSnapshot];
// get rid of web view and temp window
[self.webView stopLoading:nil];
[self.webView setFrameLoadDelegate:nil];
self.webView = nil;
self.tempWindow = nil;
}
答案 0 :(得分:2)
使用ARC时,在某些情况下保留/释放WebView
似乎有问题。在我的测试中,我发现在释放它之前在NSString
的{{1}}中加载空mainFrame
应该可以解决问题。