2013-07-24 57 views
0

如果我使用一個UICollectionView子另一UIViewController中像這樣內...的iOS:自定義viewcontrollers爲高德

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

如果我可以在15個字符以下寫評論,我只會評論 - ARC –

回答

2

ARC負責內存管理,但在這些線路

BrowseCVC *cvc = [self.storyboard instantiateViewControllerWithIdentifier:@"BrowseItemVC"]; 
[self.containerScrollView addSubview:cvc.view]; 

沒有什麼建議給它,它應該保留CVC。你只保留它的觀點。 cvc得到了處理,你得到exc_bad_access

2

正如其他人所說,BrowseCVC被ARC取消分配。您可以解決此通過創建它的實例變量或屬性,也可以將其作爲一個childViewController您的viewController:

BrowseCVC *cvc = [self.storyboard instantiateViewControllerWithIdentifier:@"BrowseItemVC"]; 
[self addChildViewController:cvc]; 
[self.containerScrollView addSubview:cvc.view]; 

這實際上應該是乾淨的解決方案。