UIWebView gibt nicht alle Live-Bytes mit ARC frei

Ich baue derzeit eine Navigations-Controller-App in iOS 5.1 auf, die ARC verwendet. Ich muss oft Webseiten anzeigen und habe einen Web-Viewer erstellt, der nur eine UIWebView mit benutzerdefinierten Inhalten an den Seiten ist. Wenn der Benutzer mit dem Betrachten der Seite fertig ist, klickt er auf die Schaltfläche "Zurück", wodurch der gesamte Speicher freigegeben wird, der dem benutzerdefinierten Web-Viewer zugeordnet ist. Mein Problem ist, dass nicht der gesamte Speicher freigegeben zu sein scheint, wenn die Zurück-Taste gedrückt wird. Ich habe eine Spielzeug-App gebaut (auf Github) das sind nur ein paar Tasten mit jeweils einem Ersthelfer, der eine andere Seite aufruft.

<code>@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];
}
</code>

Das CustomWebView ist nur ein UIWebView, das in IB mit der UIWebView-Eigenschaft verknüpft ist

<code>@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];
}
</code>

Mein Problem ist, dass ich die Heap-Baseline auf den anfänglichen ViewController setze, sobald alles geladen ist. Ich überprüfe dann den Heap nach dem Laden einer Seite und kehre dann zum ViewController zurück und erhalte die folgenden Heapshots:

Dies zeigt, dass der Heap nach jedem Klicken auf eine Schaltfläche und jeder Rückkehr zum ViewController weiter wächst, obwohl alle CustomWebView-Komponenten freigegeben werden sollten.

BEARBEITEN:

Das oben beschriebene Beispielprojekt finden Sie hierauf Github

Antworten auf die Frage(6)

Ihre Antwort auf die Frage