0

この最適化の問題があります。写真とラベルで構成される nib のビューがあります。ペン先からロードする方法は次のとおりです。

@IBOutlet weak var imageView: UIImageView!
var view: UIView!
let nibName = "customView"

override init(frame: CGRect) {
    super.init(frame: frame)
    setup()
}

public required init?(coder aDecoder: NSCoder) {
    super.init(coder: aDecoder)
    setup()
}

func setup() {
    view = loadFromNib()
    view.frame = self.bounds
    imageView.image = CustomView.defaultImage
    addSubview(view)
    setupProfileView()
}

func loadFromNib() -> UIView {
    let bundle = NSBundle(forClass: self.dynamicType)
    let nib = UINib(nibName: nibName, bundle: bundle)
    let view = nib.instantiateWithOwner(self, options: nil)[0] as! UIView
    return view
}

ロードするたびにかなりの時間がかかります。私の UI はこれらの customViews にかなり重きを置いています。約 50 個の customViews を作成して、mainThread をブロックせずに配置できる必要があります。フレーム付きのinitを使用してそれらを作成するには170ミリ秒かかり、VCにサブビューとして配置するにはさらに350ミリ秒かかります。この場合、メインスレッドの負荷を軽減する方法はありますか? たぶん、プログラムによるアプローチはペン先よりも優れているでしょうか?

4

1 に答える 1

1

バックグラウンド スレッドで実際の読み込みを実行し、それが完了したら、参照をメイン スレッドに戻し、糸車などを表示します (必要な場合):

dispatch_async(dispatch_get_global_queue(QOS_CLASS_USER_INITIATED, 0), ^{
    // Load your NIB here.

    dispatch_async(dispatch_get_main_queue(), ^{
        // Pass reference to main queue here.
    });
});

このようにして、メイン スレッドを解放したまま、パラレル スレッドで重い作業を行うことができます。

于 2015-10-18T20:10:57.777 に答える