如果我在另一个UIViewController 中使用UICollectionView子类,就像这样......
BrowseCVC *cvc = [self.storyboard instantiateViewControllerWithIdentifier:@"BrowseItemVC"];
[self.containerScrollView addSubview:cvc.view];
...要么滚动集合视图,要么点击一个单元格,它会因EXC_BAD_ACCESS而崩溃。
但是,如果我将其声明为@property (strong, nonatomic) BrowseCVC *cvc;
)并像这样使用它......
self.cvc = [self.storyboard instantiateViewControllerWithIdentifier:@"BrowseItemVC"];
[self.containerScrollView addSubview:self.cvc.view];
......一切正常。
BorwseCVC
是一个不起眼的UICollectionViewController子类,结构非常简单。
我的问题是:为什么?
答案 0 :(得分:2)
ARC负责内存管理,但在这些方面
BrowseCVC *cvc = [self.storyboard instantiateViewControllerWithIdentifier:@"BrowseItemVC"];
[self.containerScrollView addSubview:cvc.view];
没有什么可以暗示它应该保留cvc。您只保留其视图。 cvc被取消分配,你得到exc_bad_access
答案 1 :(得分:2)
正如其他人所说,BrowseCVC
被ARC取消分配。你可以通过为它创建一个iVar或属性,或者将它作为childViewController添加到你的viewController来解决这个问题:
BrowseCVC *cvc = [self.storyboard instantiateViewControllerWithIdentifier:@"BrowseItemVC"];
[self addChildViewController:cvc];
[self.containerScrollView addSubview:cvc.view];
这应该是最干净的解决方案。