UIWebView утечка - PullRequest
       10

UIWebView утечка

1 голос
/ 25 мая 2011

У меня есть класс, который расширяет UIViewController и реализует UIWebViewDelegate, например:

@interface TableViewController : UIViewController <UIWebViewDelegate, UIAlertViewDelegate>{
    UIWebView *articleWebView;
    NSString *link;
    UIActivityIndicatorView *activityIndicator;
    NSURL * safariUrl;
}

Я пытаюсь загрузить веб-страницу в uiwebview, все работает нормально, но я получаю некоторые утечки (например, GeneralBlock-56, GeneralBlock-1024 и т. Д.), И я не могу узнать, откуда они берутся.
Вот что я делаю:

- (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];
}

Что я делаю не так? Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 25 мая 2011

Наряду с установкой делегата webView равным nil, вы должны попросить webView прекратить загрузку.Добавьте следующие строки кода и попробуйте:

- (void)dealloc {
    self.articleWebView.delegate = nil;
    [articleWebView stopLoading];
    [articleWebView release];
    [super dealloc];
}
0 голосов
/ 25 мая 2011

Если articeWebview является IBOutlet, почему вы хотите allocate это ??

...