【发布时间】:2020-11-01 12:58:15
【问题描述】:
我正在使用UIPageViewController 行为的标签视图。所以我定义了以下模型:
class WalktroughModel: Identifiable, ObservableObject {
let id: UUID = UUID()
let imageName: String
let title: String
init(imageName: String, title: String) {
self.imageName = imageName
self.title = title
}
}
现在我使用这个 swiftUI 视图作为标签视图的子视图:
struct WalktroughAsset: View {
@StateObject var asset: WalktroughModel
var body: some View {
Image(asset.imageName)
.resizable()
.overlay(Color.black.opacity(0.43))
.overlay(
VStack{
Spacer()
Text(asset.title)
.foregroundColor(.white)
.font(.custom("OpenSans-regular", size: 22.0))
}
.padding(.bottom, 64)
)
}
}
在我的内容视图中,我有以下内容:
struct ContentView: View {
var thumbs: [WalktroughModel] = [WalktroughModel(imageName: "splash-1", title: "Concepto 1"), WalktroughModel(imageName: "splash-2", title: "Concepto 2"), WalktroughModel(imageName: "splash-3", title: "Concepto 3")]
var body: some View {
ZStack {
Color.black.overlay(TabView{
ForEach(thumbs) {
image in
WalktroughAsset(asset: image)
}
}
.tabViewStyle(PageTabViewStyle())
.padding([.bottom, .top], 32)
)
}
.edgesIgnoringSafeArea(/*@START_MENU_TOKEN@*/.all/*@END_MENU_TOKEN@*/)
}
}
现在,当我构建和运行时,当我滑动到另一个视图时,内存会从 80 mb 跳到 160 mb,当我滑动到第三个视图时,内存会跳到 230 mb。会发生什么?
最好的问候
【问题讨论】:
-
很可能它会多次加载所有视图。可以尝试这样的事情stackoverflow.com/a/61234030/4080925 即使它不是一个可以解决你问题的导航。
-
@MwcsMac 但如何在 tabview 中避免这种情况?
-
可能你的图片很大。
-
@Asperi 没错,但我想释放那段记忆。我怎样才能得到它?
-
仪器/泄漏是否显示内存泄漏?如果是 - 你会显示泄漏的堆栈/对象吗?如果不是——那么就没有泄漏——我们使用 ARC,因此运行时自行决定何时从内存中删除已释放的资源。
标签: ios swift memory-management memory-leaks swiftui