私は非常に大きなUIScrollViewをwebviews/subviewsなどで使用していますので、動的にする必要があり、3つのコンテナビューがプリロードされています。これはシミュレータでは動作しますが、メモリが少ないデバイスではクラッシュします。 Iは追加だと再帰的方法inifinite UIScrollViewプレロード付き
private void destroyChildren(UIView view, int level) {
if (view.Subviews.Length > 0) {
foreach (UIView subview in view.Subviews) {
destroyChildren(subview, level++); // recurse
subview.RemoveFromSuperview();
if (subview is UIWebView) {
(subview as UIWebView).ShouldStartLoad -= webHandler;
}
if (subview is scrollViewer) {
(subview as scrollViewer).clicked -= viewClicked;
}
subview.BackgroundColor = UIColor.Cyan; // release bgImage?
subview.Dispose();
}
}
else {
if (level> 0) { // dont dispose root view
view.Dispose();
}
}
とdestroyChildren(MYVIEW、0)と呼ばれるを使用して、3つのマスタビューから除去します。 メモリ警告が表示されているページが10回ほど回転してもアプリケーションがクラッシュします。このコードは大丈夫ですか?私は代わりにいくつかの種類のviewcontrollerを使用する必要があります。
ありがとうございました!
FOREACHでは子をNULLに設定することはできません。私はDidReceiveMemoryWarningの紋章を書いたが、すべてがすでに処分されているので、救命艇に入るのはちょうどその時だった。 –
FOREACHでは子をNULLに設定することはできません。子を通してRemoveFromSuperviewを呼び出す必要があります。 – Scarlaxx