我尝试管理多个视图并将这些引用保存在可变数组中。 如果我在可变数组中添加视图引用并添加到视图中,则作为子视图。 然后引用计数似乎不正确。会导致错误的访问错误。
所以我的问题是有一种管理这些观点的好方法。 例如,如果我需要重用视图。没有使用时将它们保存在可变数组中,以后再重复使用。
编辑:
NSMutableArray* reuseViews = [NSMutableArray arrayWithCapacity:0];
for (int i=0; i<3; i++) {
UIView* v = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 10, 10)];
[reuseViews addObject:v];
[self.view addSubview:v];
}
for (int i=0; i<3; i++) {
UIView* v = [reuseViews objectAtIndex:i];
[v removeFromSuperview]; // it also removes the reference in the array
[reuseViews removeObject:v]; // will crash
}
答案 0 :(得分:2)
尝试删除第三个项目时,第二个for
循环将崩溃。这是因为i
的值为2,索引中的项目数为1.当您尝试将对象拉出数组时,它将崩溃。
要解决此问题,请等到循环之后删除所有对象:
for (int i=0; i<3; i++) {
UIView* v = [reuseViews objectAtIndex:i];
[v removeFromSuperview];
}
[reuseViews removeAllObjects];
更好的方法是使用快速枚举:
for (UIView* v in reuseViews) {
[v removeFromSuperview];
}
[reuseViews removeAllObjects];