IOS UIWebView Утечка - PullRequest
       12

IOS UIWebView Утечка

5 голосов
/ 10 июня 2011

Здравствуйте, у меня проблемы с утечкой памяти из UIWebView. У меня есть страницы отображения WebView со ссылками, находящимися в UITableView, с другого контроллера.это.

Я попробовал все в Интернете, как:

[[NSUserDefaults standardUserDefaults] setInteger:0 forKey:@"WebKitCacheModelPreferenceKey"];

//Clear cache of UIWebView
NSURLCache *sharedCache = [[NSURLCache alloc] initWithMemoryCapacity:0 diskCapacity:0 diskPath:nil];
[NSURLCache setSharedURLCache:sharedCache];
[sharedCache release];
sharedCache = nil;
[[NSURLCache sharedURLCache] removeAllCachedResponses];

это мой код:

-(void) viewWillAppear:(BOOL) animated
{
    NSMutableURLRequest *_req=[[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:link] cachePolicy:NSURLRequestReloadIgnoringLocalAndRemoteCacheData timeoutInterval:120];

    [_req setHTTPShouldHandleCookies:NO];
    [self setMyRequest:_req];
    [req release];
}

[webView loadRequest:myRequest];

-(void) viewWillDisappear:(BOOL) Animated
{
    [webView stopLoading];
    [webView loadHTMLString:@"<html></html>" baseURL:nil];
}

- (void)dealloc {
    [myRequest release];
    [webView stopLoading];
    [webView release];
    [link release];
    [super dealloc];
}

Теперь я тестировал только на симуляторе 4.2 и 4.3, я использую xcode 4. Я получаю утечки, когда нажимаю кнопку «Назад» в навигаторе.

А вот код из моего контроллера табличного просмотра

- (void)viewDidLoad {
    webViewController=[[ItemDetail alloc] initWithNibName:@"ItemDetail" bundle:[NSBundle mainBundle] ];

    [super viewDidLoad];
}


- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {

    webViewController.link=http://www.myLink.com;
    [self.navigationController pushViewController:webViewController animated:YES];

}

-(void) dealloc
{
    [webViewController release];
    ...
    ...
    [super dealloc];
}

Вот ссылка на экран: http://postimage.org/image/368r0g0xw/

Любая помощь будет оценена, спасибо

1 Ответ

1 голос
/ 29 июня 2011
-(void) viewWillAppear:(BOOL) Animated
{
    //CONNECTION INIT
    [web setDelegate:self];

    NSURL *url=[[NSURL alloc] initWithString:link];

    NSURLRequest *_req=[[NSURLRequest alloc] initWithURL:url cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:120];

    [self setReq:_req];

     [_req release];
     [url release];
    [web loadRequest:req];


}

-(void) viewWillDisappear:(BOOL) Animated
{
    [self setReq:nil];
    if ([web isLoading])
    [web stopLoading];
    [web setDelegate:nil];
}

- (void)dealloc {
    [req release];
    [map release];
    [web setDelegate:nil];
    [web release];
    [link release];
    [super dealloc];
}

Теперь я освобождаю его после того, как возвращаюсь к табличному представлению, после того, как я его освобождаю, он по-прежнему оставляет около 3 МБ, но теперь, когда я снова создаю представление и освобождаю его, эти 3 МБ остаются неизменными. Weird ...

Item Detail *webViewController=[[ItemDetail alloc] initWithNibName:@"ItemDetail" bundle:[NSBundle mainBundle] ];


    [self.navigationController pushViewController:webViewController animated:YES];
    [webViewController release];
...