我正在通过我的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