IOS loadingView from nib



我有这个优化问题。我在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是相当沉重的那些自定义视图,我需要能够创建大约50个,并把他们周围没有阻塞主线程。使用initwithframe创建它们需要170毫秒,在vc中将它们作为子视图需要350毫秒。在这种情况下,我如何减轻主线程的负载有什么建议吗?也许编程的方法会比笔尖的方法更好?

只需在后台线程中执行实际加载,一旦完成-将引用传递回主线程,同时显示一个纺车或其他东西(如果您想要并且如果需要):

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.
    });
});

这样你就可以在并行线程中完成繁重的工作,同时保持主线程空闲。

相关内容

  • 没有找到相关文章

最新更新