我在这里有点修复。应用程序搜索Core Data并使用50多个新UIViewController子类在屏幕上显示,这些子类将添加到当前视图中。当新搜索到来时,这些VC将从视图中删除并应该被释放。但是,我没有保留对VC的引用。
我尝试使用保存它们的数组,但这似乎不起作用。我该如何处理这样的事情?
for (UIView *view in scrollView.subviews) {
[view removeFromSuperview];
}
[gridVCs removeAllObjects];
int numItems = [searchResults count];
int n = 0;
for(Plant *plant in searchResults)
{
GridViewCellController *gridVC = [[GridViewCellController alloc] initWithNibName:@"GridViewCellController" bundle:nil]; // !!! XXX
[gridVC setPlant:plant];
[gridVC setSearchVC:self];
gridVC.label.text = plant.naamnl;
[gridVC.imageView setImage:[UIImage imageWithContentsOfFile:foto_url]];
[scrollView addSubview:gridVC.view];
[gridVCs addObject:gridVC];
n++;
}
非常感谢任何帮助!
答案 0 :(得分:0)
我有一个与我正在处理的项目类似的问题,我最终使用UITableView,每次我需要创建一个新的UITableViewCell我会改为创建它的UIViewController,将视图控制器添加到一个数组并设置[ UITableViewCell标签]到数组中视图控制器的索引。如果[UITableView dequeTableViewCell ...]返回了一个UITableViewCell我可以使用我将通过使用[UITableViewCell标签]作为其视图控制器的索引来获取其UIViewController,我的视图控制器有一个方法,所以我可以更改它所代表的数据对象。由于我一次只能看到一个UITableViewCell,(两个在它们之间滚动时)我只需要两个UIViewController。我还使用了一个技巧让UITableView向侧面滚动而不是向上和向下滚动。
答案 1 :(得分:0)
当你调用removeAllObjects
时,它会将数组中每个对象的refCount减少到-1,但它仍然是正数。
由于每次创建时都没有释放gridVC
,因此会有很多泄漏:
GridViewCellController *gridVC = [[GridViewCellController alloc] initWithNibName:@"GridViewCellController" bundle:nil];
...
[gridVCs addObject:gridVC];
[gridVC release];