我对iOS开发还很陌生。我有一个(非常?)大的视图,这导致了内存错误。我的body
var看起来像这样:
var body: some View {
ZStack {
Color(...)
Rectangle()
ScrollView {
VStack {
ZStack {
RoundedRectangle(...)
RoundedRectangle(...)
VStack {
ZStack{
Circle()
Circle()
Circle()
Image(...)
}.overlay(
HStack {
// more stuff
}
)
}
// many more views
}
}
}
}
}
我添加和删除视图,以确认这是一个与视图过多有关的问题。在某个时候,当我添加另一个视图时,我得到以下(或类似的)内存错误:Thread 1: EXC_BAD_ACCESS (code=2, address=0x16cd27fc8)
每次的地址似乎都不一样,但总是以0x16开始,这让我相信这是一个堆栈溢出......我发现this answer/question有一个非常相似的问题,并能够通过将大型结构体移动到堆中来解决它。我不确定如何确切地完成这一点,即使在查看了答案中提供的示例之后。
我的主要想法是,必须有一个更好的方式来组织我的身体摆在首位,我只是失踪。使用堆真的有必要渲染视图与许多儿童?任何帮助或建议是感激。
2条答案
按热度按时间yv5phkfx1#
body
有10个视图限制,将body
分解为尽可能小的自定义子视图(基于每个视图使用的let/@State变量)。7gcisfzg2#
使用LazyVstack而不是Vstack,它只加载我们在屏幕上看到的视图。