首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >UIWebView泄漏

UIWebView泄漏
EN

Stack Overflow用户
提问于 2011-05-25 19:51:16
回答 2查看 1.7K关注 0票数 1

我有一个扩展UIViewController并实现UIWebViewDelegate的类,如下所示:

代码语言:javascript
复制
@interface TableViewController : UIViewController <UIWebViewDelegate, UIAlertViewDelegate>{
    UIWebView *articleWebView;
    NSString *link;
    UIActivityIndicatorView *activityIndicator;
    NSURL * safariUrl;
}

我正在尝试将网页加载到uiwebview中,一切正常,但我得到了一些泄漏(像GeneralBlock-56,GeneralBlock-1024等),我找不到它们来自哪里。

这就是我正在做的事情:

代码语言:javascript
复制
- (void)viewDidLoad {
[super viewDidLoad];

if (articleWebView){
    [articleWebView loadHTMLString: @"" baseURL: nil];
    [articleWebView release];
    articleWebView = nil;
}

articleWebView = [[UIWebView alloc] initWithFrame: CGRectMake(0,0,320,380)];
if (activityIndicator){

    [activityIndicator release];
    activityIndicator = nil;
}
activityIndicator = [[UIActivityIndicatorView alloc]initWithFrame:CGRectMake(self.view.bounds.size.width/2-24, self.view.bounds.size.height/3-12, 50, 50)];
activityIndicator.activityIndicatorViewStyle = UIActivityIndicatorViewStyleGray;
[self.view addSubview:activityIndicator];


link = [link stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
link = [link stringByTrimmingCharactersInSet:[NSCharacterSet newlineCharacterSet]];
link = [(NSString*) CFURLCreateStringByAddingPercentEscapes (NULL, (CFStringRef)link, NULL,
                                                             NULL, kCFStringEncodingUTF8) autorelease];


NSURL *url = [NSURL URLWithString:link];
NSURLRequest *requestObj = [NSURLRequest requestWithURL:url];   

[[self articleWebView] setDelegate: self];

[articleWebView loadRequest:requestObj];

[link release];

}

//////////////////////////////////////////////
-(void)webViewDidFinishLoad:(UIWebView *)webView{
if (activityIndicator){
    [activityIndicator stopAnimating];
    [activityIndicator release];
    activityIndicator = nil;
    self.view = articleWebView;

}
//////////////////////////////////////////////
- (void)viewDidUnload {
    [super viewDidUnload];
    [articleWebView loadHTMLString: @"" baseURL: nil];
    [self.articleWebView release];
    self.articleWebView = nil;
}
//////////////////////////////////////////////
- (void)dealloc {
    self.articleWebView.delegate=nil;
    [super dealloc];
}

我做错了什么?提前谢谢你。

EN

回答 2

Stack Overflow用户

发布于 2011-05-25 21:22:42

在将webView委托设置为nil的同时,您应该要求webView停止加载。添加以下代码行,然后尝试:

代码语言:javascript
复制
- (void)dealloc {
    self.articleWebView.delegate = nil;
    [articleWebView stopLoading];
    [articleWebView release];
    [super dealloc];
}
票数 1
EN

Stack Overflow用户

发布于 2011-05-25 19:54:53

如果articeWebview是一个IBOutlet,为什么你想要allocate它??

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6124020

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档