我使用 objectWillChange 手动更新变量,因为我需要在后台更改变量以防止 UI 滞后。
通常,在主线程中追加、删除和更改 mainContent 变量会造成一些滞后。 检查下面的第二种方式。
谁能告诉我我走对了路吗?这是应该的吗?
//第一种方式 //没有任何滞后
class MyClass: ObservableObject {
var mainContent = [Model]() {
willSet{
DispatchQueue.main.async {
self.objectWillChange.send()
}
}
}
init(){
fetchItems()
}
func fetchItems(){
DispatchQueue.global(qos: .userInitiated).async { [self] in
let fetchedContents = NetworkRequest()
for content in fetchedContents {
//lots of append,remove,change iterations for mainContent
mainContent[x] = bla bla bla
}
}
}
}
如果我这样做,主线程上会出现一点延迟。
//第二种方式
class MyClass: ObservableObject {
@Published var mainContent = [Model]()
init(){
fetchItems()
}
func fetchItems(){
DispatchQueue.global(qos: .userInitiated).async { [self] in
let fetchedContents = NetworkRequest()
for content in fetchedContents {
//lots of append,change iterations for mainContent
DispatchQueue.main.async{
// this places do some lags on the UI
mainContent[x] = bla bla bla
}
}
}
}
}
感谢您的帮助!