Attualmente sto costruendo un'app di navigazione controller in iOS 5.1 che utilizza ARC. Spesso ho bisogno di visualizzare pagine web e ho creato un visualizzatore web che è solo un UIWebView con alcuni contenuti personalizzati ai lati. Quando l'utente ha terminato di guardare la pagina, ha premuto il pulsante Indietro che dovrebbe rilasciare tutta la memoria associata al visualizzatore Web personalizzato. Il mio problema è che tutta la memoria non sembra essere rilasciata quando viene premuto il pulsante Indietro. Ho creato un'app giocattolo (on github) composta da un paio di pulsanti ciascuno con un primo risponditore che chiama una pagina diversa.UIWebView non libera tutti i byte attivi utilizzando ARC
@implementation ViewController
-(IBAction)googlePressed:(id)sender
{
CustomWebView *customWebView = [[CustomWebView alloc] initWithStringURL:@"http://www.google.com"];
[self.navigationController pushViewController:customWebView animated:NO];
}
-(IBAction)ksbwPressed:(id)sender
{
CustomWebView *customWebView = [[CustomWebView alloc] initWithStringURL:@"http://www.ksbw.com/news/money/Yahoo-laying-off-2-000-workers-in-latest-purge/-/1850/10207484/-/oeyufvz/-/index.html"];
[self.navigationController pushViewController:customWebView animated:NO];
}
-(IBAction)feedProxyPressed:(id)sender
{
CustomWebView *customWebView = [[CustomWebView alloc] initWithStringURL:@"http://feedproxy.google.com/~r/spaceheadlines/~3/kbL0jv9rbsg/15159-dallas-tornadoes-satellite-image.html"];
[self.navigationController pushViewController:customWebView animated:NO];
}
-(IBAction)cnnPressed:(id)sender
{
CustomWebView *customWebView = [[CustomWebView alloc] initWithStringURL:@"http://www.cnn.com/2012/04/04/us/california-shooting/index.html?eref=rss_mostpopular"];
[self.navigationController pushViewController:customWebView animated:NO];
}
Il CustomWebView è solo un UIWebView collegato in IB della UIWebView Proprietà
@implementation CustomWebView
@synthesize webView, link;
- (id)initWithStringURL:(NSString *) stringURL
{
if (self = [super init]) {
link = stringURL;
}
return self;
}
- (void)viewDidLoad
{
[super viewDidLoad];
NSURL *url = [NSURL URLWithString:link];
NSURLRequest *urlRequest = [NSURLRequest requestWithURL:url];
[webView loadRequest:urlRequest];
}
- (void)viewDidUnload
{
[super viewDidUnload];
}
mio problema è che ho impostato la linea di base mucchio di essere il primo ViewController una volta che tutto è stato caricato. Ho quindi controllare il mucchio dopo il caricamento di una pagina per poi tornare al ViewController e ottenere i seguenti heapshots:
Il che dimostra che dopo ogni serie di clic su un pulsante e tornando al ViewController mucchio continua a crescere anche se CustomWebView dovrebbe essere rilasciato.
EDIT:
Il progetto di esempio sopra descritto può essere trovato on github
Hai fatto in modo zombie sono disabilitate? – MishieMoo
Sì, gli zombi sono disabilitati – brendan
Girati al buio ma prova a rendere le tue proprietà IBOutlet (deboli). – Rengers