2012-03-18 8 views
0

iPadアプリに参加するには、とてもシンプルなブラウザを開発しようとしています。そのブラウザにはタブがあります。すべてのタブは.xibに基づいており、ほとんどすべての.xibフレームがUIWebViewで埋められます。 私はNSMutableArrayの中にすべてtabsArrayと書いてあります。ARCでのUIWebViewのリリース方法

だから、ここで私は、配列に新しいタブを追加する方法は次のとおりです。 宣言:

の.h

@property (nonatomic,strong) NSMutableArray *tabsArray; 
@property (nonatomic,strong) UIDetailWebController *pagina; 

.M私は画面に表示する方法

self.pagina = [[UIDetailWebController alloc] initWithNibName:@"UIDetailWebController" bundle:nil]; 
[tabsArray insertObject:pagina atIndex:currentViewTag+1]; 

[self.view addSubview:[[tabsArray objectAtIndex:currentViewTag+1] view]]; 

そして、最後に、ここで私は、ユーザーが(特定のインデックスを持つ)タブを閉じたときのUIWebViewを「解放」しようとしている方法は次のとおりです。

[[[tabsArray objectAtIndex:index] view] removeFromSuperview]; 
[[tabsArray objectAtIndex:index] setWebView:nil]; 
[[tabsArray objectAtIndex:index] setView:nil]; 
[tabsArray removeObjectAtIndex:index]; 

私の問題がある:これを行うことで、私は単純にドンと思われます」それを解放する。メモリ消費量は同じままです。私がYouTube動画を再生している場合、音声は引き続き再生されます。 私はプログラミングの面で新しく、iOS 5でARCを使ってiOS開発を開始しました。おそらく、メモリ管理に関連する基本的な詳細をスライドさせています。

SOLUTION:

[OK]を、私はPullToRefreshViewの実装(https://github.com/chpwn/PullToRefreshView)のWebViewを保持されたものがあったことが分かりました。デリゲートをnilに設定すると、すべてがうまくいく!プロパティpaginaがある

+0

はい、それはself.paginaです。 – JulianoRossi

+0

元のコードはすでにself.paginaでしたが、質問を書いている間に間違って入力しました。ごめんなさい。 – JulianoRossi

+0

'[tabsArray objectAtIndex:index]'の 'index'が正しい値を持っていますか?また、ビューを削除するコードが実際に呼び出されていることを確認していますか? – sch

答えて

2

は強い性質であるので、それはあなたがそれに割り当てる値を保持:だからあなたはnilに設定する必要があり

self.pagina = [[UIDetailWebController alloc] initWithNibName:@"UIDetailWebController" bundle:nil]; 

を:

[tabsArray removeObjectAtIndex:index]; 
self.pagina = nil; // Add this line. 

を最後に、ではありません次の行が必要でない可能性があります。

[[tabsArray objectAtIndex:index] setWebView:nil]; 
[[tabsArray objectAtIndex:index] setView:nil]; 

帽子ライン:

[[[tabsArray objectAtIndex:index] view] removeFromSuperview]; 

がに単純化することができる。

[self.pagina removeFromSuperview]; 
+0

youtube video playing ...// – JulianoRossi

+0

それは解決していません。しかし、それはおそらくこれです。私のコードは大規模ですが、さまざまな種類のタブを作成するためのさまざまな方法があります。おそらく私は途中で何かを忘れているでしょう。私は見続けるだろう、もし私がそれを解決するなら、私はあなたに知らせるでしょう!ありがとうございました! :) – JulianoRossi

+0

プロパティpaginaの代わりに、私は "UIDetailWebController * pagina = [UIDetailWebController alloc ....]を作ったのですが、何もする必要はありませんよね? – JulianoRossi

2

私はこの問題は、あなたが、アレイ内のすべてのあなたのUIDetailWebControllersを保存することだと思います。配列は、DetailWebControllerへの強力なポインタを保持しています。

[tabsArray removeObjectAtIndex:index]; 
をし、それが動作するはず [self.pagina removeFromSuperView];を呼び出した後

self.pagina = nil; 

を設定します。 あなたは使用する必要があります。

+0

それを解決しませんが、self.paginaをnilに設定すると、私がUIDetailWebController * paginaだけをプロパティにする代わりに、私はwebviewをリリースするために他の何かをする必要はありませんか? – JulianoRossi