所以我在循环中向ViewController的视图中添加了几个子视图;问题是,从我添加子视图开始,它出现了大约5秒的延迟。 我确保在添加它之后在子视图和我的视图上调用setNeedsDisplay ,没有骰子。我甚至用NSThread.isMainThread()
仔细检查代码 在主线程上执行,并按预期返回true。这是我的确切代码:
dispatch_async(dispatch_get_main_queue()) {
var nib = UINib(nibName: "ProfileCard", bundle: NSBundle.mainBundle())
var profiles = self.delegate.user!.profilesToShow
//loop to add ProfileCard subviews
while profiles.count > 0 && self.deck.count < self.MAX_DECK_SIZE {
println("Adding Card")
//setup subview
var card = nib.instantiateWithOwner(self, options: nil).first! as ProfileCard
card.delegate = self
card.frame = CGRect(x: (self.view.bounds.width - 300)/2, y: 100, width: 300, height: 200)
card.displayProfile(profiles.first!)
//add subview
self.view.addSubview(card)
self.view.sendSubviewToBack(card)
card.setNeedsDisplay()
self.view.setNeedsDisplay()
//add card to deck, mark as shown
self.deck.append(card)
profiles.removeAtIndex(0)
}
}
这个循环中的任何打印语句在子视图实际显示之前大约运行约5秒,我不确定是什么原因造成的。我甚至在子视图的init方法中设置了print语句,甚至是那些预期的打印语句。
答案 0 :(得分:1)
此代码可能不在后台线程上运行,但您必须进入主线程的事实表明您有其他 在后台线程上运行的代码。其他代码是问题的根源。它试图与后台线程上的接口进行通信。这反过来会影响整个绘图系统。