From f796823db8984ccfdf7480dfb148407550e681a2 Mon Sep 17 00:00:00 2001 From: shenlei Date: Mon, 6 Jul 2026 11:22:09 +0900 Subject: [PATCH] =?UTF-8?q?=E9=A2=84=E5=8A=A0=E8=BD=BD=E6=8E=A7=E5=88=B6?= =?UTF-8?q?=E5=99=A8=E8=A1=A5=E5=85=85=E9=A1=B5=E9=9D=A2=E8=A7=86=E5=9B=BE?= =?UTF-8?q?=E7=BC=93=E5=AD=98=E5=91=BD=E4=B8=AD=E6=97=A5=E5=BF=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit pageViewForDisplay / prime / takePreloadedView 三条取视图路径打印 HIT/MISS 及视图地址,invalidate 打印被清空的缓存页码,便于排查 翻页时页面视图是否命中缓存。 Co-Authored-By: Claude Fable 5 --- .../Paging/RDReaderPreloadController.swift | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/Sources/RDReaderView/ReaderView/Paging/RDReaderPreloadController.swift b/Sources/RDReaderView/ReaderView/Paging/RDReaderPreloadController.swift index 20f7f32..293b4b3 100644 --- a/Sources/RDReaderView/ReaderView/Paging/RDReaderPreloadController.swift +++ b/Sources/RDReaderView/ReaderView/Paging/RDReaderPreloadController.swift @@ -66,6 +66,10 @@ final class RDReaderPreloadController { } func invalidate(environment: Environment) { + RDReaderTapDebug.log( + "PreloadController.invalidate", + "clearing pageCurlCached=\(pageCurlCachedViews.keys.sorted()) preloaded=\(preloadedPageViews.keys.sorted())" + ) pageCurlCachedViews.values.forEach { $0.removeFromSuperview() } preloadedPageViews.values.forEach { $0.removeFromSuperview() } pageCurlCachedViews.removeAll() @@ -81,8 +85,16 @@ final class RDReaderPreloadController { let view: UIView if let reusableView = detachedReusablePageView(for: pageNum) { view = reusableView + RDReaderTapDebug.log( + "PreloadController.pageViewForDisplay", + "cache HIT page=\(pageNum) view=\(RDReaderTapDebug.describe(reusableView))" + ) } else { view = contentViewProvider(pageNum, nil) ?? UIView() + RDReaderTapDebug.log( + "PreloadController.pageViewForDisplay", + "cache MISS page=\(pageNum) created=\(RDReaderTapDebug.describe(view))" + ) } if shouldCache(view: view, for: pageNum, environment: environment) { pageCurlCachedViews[pageNum] = view @@ -95,6 +107,10 @@ final class RDReaderPreloadController { func takePreloadedView(for pageNum: Int) -> UIView? { let preloaded = preloadedPageViews.removeValue(forKey: pageNum) preloaded?.removeFromSuperview() + RDReaderTapDebug.log( + "PreloadController.takePreloadedView", + "cache \(preloaded == nil ? "MISS" : "HIT") page=\(pageNum) view=\(RDReaderTapDebug.describe(preloaded))" + ) return preloaded } @@ -118,10 +134,22 @@ final class RDReaderPreloadController { let contentView: UIView if let existing = preloadedPageViews[targetPage], existing.superview === preloadHostView { contentView = existing + RDReaderTapDebug.log( + "PreloadController.prime", + "cache HIT(preloaded) page=\(targetPage) view=\(RDReaderTapDebug.describe(existing))" + ) } else if let cached = pageCurlCachedViews.removeValue(forKey: targetPage), cached.superview == nil { contentView = cached + RDReaderTapDebug.log( + "PreloadController.prime", + "cache HIT(pageCurl) page=\(targetPage) view=\(RDReaderTapDebug.describe(cached))" + ) } else { contentView = contentViewProvider(targetPage, nil) ?? UIView() + RDReaderTapDebug.log( + "PreloadController.prime", + "cache MISS page=\(targetPage) created=\(RDReaderTapDebug.describe(contentView))" + ) } let shouldCacheContentView = shouldCache(view: contentView, for: targetPage, environment: environment) if shouldCacheContentView {