2

それに応じてアプリケーションからサブビューを削除すると、メモリ管理が改善されたように見えます(アプリケーション内に多くのサブビューがあります)。

だから私の質問は、あなたが作成したすべてのサブビューまたはそのオプションを削除する必要があるということです(サブビューが非常に少ないため、メモリ使用量にあまり影響しない場合)?

4

3 に答える 3

3

サブビューは実際にはかなりのメモリを消費するため(UIViewは基盤となるCALayerと比較して非常に高価です)、そのため、呼び出し-removeSubviewはGPUからストレスをアンロードするだけでなく、より多くを解放するため、インターフェイス応答の顕著なジャンプが見られます。サブビューとしてのメモリは通常、後で解放されます。

しかし、あなたの質問に答えるには:いいえ。ビューがコンテキストから外れるか、サブビューツリーから削除されると、それ自体のサブビューツリーが壊れ、ビューはARC環境で解放され、破棄されます。ARCがなくても不要です。

于 2012-06-16T18:08:03.407 に答える
2

ビューを保持しているスーパービューが削除されると、そのすべてのサブビューも削除されるため、必須ではありません。ビューの削除について心配する必要はありません。

于 2012-06-16T18:06:24.893 に答える
0

作成するサブビューごとにタグを割り当てると、スーパービューが削除される前のある時点でタグを削除できるため、タグの値に応じて要素を簡単に出し入れできることがわかりました。
ビュー上のすべてのオブジェクトはサブビューであるため、グラフィックを単純な方法で使用する場合、一部のアプリケーションではタグを保持することが賢明であるように思われます。

単純な水平線を描きたいとしましょう。

水平線を引く関数の一部:

CGFloat lineWidth=8;
UIView *lineView = [[UIView alloc]initWithFrame:CGRectMake(oxx,oyy-(lineWidth/2),pxx+(lineWidth/2),pyy)];
lineView.backgroundColor = colours;
lineView.tag=5;
[self.view addSubview: lineView]; ...

その後、しばらくして、タグ付けされたサブビューを削除します。

 for (UIView *subview in [self.view subviews]) {
    if (subview.tag == 101 || subview.tag == 102 ||subview.tag == 103 ||subview.tag == 104 || subview.tag == 5) {
        [subview removeFromSuperview];
    }
}
于 2013-06-02T21:04:19.987 に答える