我正在通過我的iOS應用程序,使用「模擬內存警告」作爲我的正義之錘,並且它引起了一些意想不到的問題(自然而然)。但是這是一個讓我難以接受的問題:對象似乎不再平等。didReceiveMemoryWarning和重新構建的實例變量相等性檢查
說我的視圖控制器(我們將其命名爲VCBob
)有...
- 兩個單獨定製
UIViews
爲子視圖(讓我們命名這些觀點viewA
和viewB
)- 每個都有自己的
UICollectionView
暴露物業collectionView
(這些UICollectionViews
使用VCBob
作爲他們delegates
)
- 每個都有自己的
- 一個
UIButton
在按下時,上到堆棧
所以我輕觸UIButton
和這裏推一些其他視圖控制器(否則微不足道的一個)來了微不足道視圖控制器。我點燃了「模擬內存警告」選項,並且VCBob
被編程爲在-didReceiveMemoryWarning
內部丟棄viewA
和viewB
,因爲它們被完全重新創建並重新插入到viewWillAppear
的視圖層次結構中(只要它們是nil
時間爲viewWillAppear
)。下面是VCBob
該實現:
- (void)didReceiveMemoryWarning {
BOOL hasSuperview = self.view.superview != nil;
[super didReceiveMemoryWarning];
if (!hasSuperview) {
_viewA = nil;
_viewB = nil;
}
}
我然後點擊導航欄上的後退按鈕,並VCBob
回來發揮作用。這兩個自定義UIViews
仍然存在,並且它們各自的UICollectionViews
都加載了內容。當我在任一集合視圖中點擊其中一個UICollectionViewCells
時,將在VCBob
上調用-collectionView:didSelectItemAtIndexPath:
方法;到現在爲止還挺好。這個實現看起來像這樣。
- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath {
if (collectionView == self.viewA.collectionView) {
NSLog(@"Do something here!");
} else if (collectionView == self.viewB.collectionView) {
NSLog(@"Do something else here!");
}
}
問題是沒有任何反應 - 沒有得到記錄。這兩個if
條件評估爲false。這是爲什麼?我似乎認爲我可能會在didReceiveMemoryWarning
中做壞事。我不應該在那裏處理意見嗎?
你得出了我所做的確切結論,並在發佈我的報告後發佈了一個瞬間。但既然你不是我,我會給你答案的功勞! – 2013-05-01 20:18:06
阿哈哈謝謝:)用英文寫作需要我太多時間,我必須仔細檢查每一個單詞我鍵入..如果我可以在意大利回答我會更快:) – 2013-05-01 20:20:43
我想如果我可以閱讀意大利語,我也會是一個更好的人。謝謝,亞歷山德羅! (順便說一下,你的英語很好。) – 2013-05-01 20:32:36