Posted on 

Reduce FetchRequest refresh by the change of Sheet detents

Duplicate Refresh of FetchRequest in the Sheet Detents Change

Sheet detent 改变的时候 Fetchrequest 都会被重新请求一次。这样在用户频繁的 sheet 交互中会造成严重的性能问题

  1. Debounce 输入防抖处理:防止用户快速输入时频繁触发后台任务。使用 Combine 的 .debounce 方法来减少频繁的输入请求,这样只有在用户停止输入一定时间后才会触发搜索操作,减少不必要的后台任务。DispatchQueue 或 Combine 可以用于实现此功能。

  2. **防止不必要的刷新**:每次 sheet detent 改变时导致 FetchRequest 重新刷新,可能是因为 SwiftUI 在某些条件下会重新计算视图。如果 FetchRequest 在视图中定义,视图重新计算时会重新发起查询。我们可以考虑将 FetchRequest 与 View 逻辑分离,使用 @ObservedObject 或 @StateObject 来持久化状态,利用 @ObservedObject 或 @StateObject 来创建和管理一个 ViewModel,将数据获取逻辑从视图中分离出来,这样可以更好地控制数据的刷新逻辑,并且在 View 重新计算时不会重新发起请求,避免 FetchRequest 在视图生命周期中的自动刷新。
    

JVM为每个加载的classinterface创建了对应的Class实例来保存classinterface的所有信息;

获取一个class对应的Class实例后,就可以获取该class的所有信息;

通过Class实例获取class信息的方法称为反射(Reflection);

JVM总是动态加载class,可以在运行期根据条件来控制加载class。