gpt4 book ai didi

iphone - navigationController popToRootViewController 和 viewWillDisappear

转载 作者:行者123 更新时间:2023-12-03 20:46:06 24 4
gpt4 key购买 nike

我有一个简单的导航层次结构:

Controller 1 > Controller 2 > Controller 3

每个 Controller 都包含对其子级和父级的引用(@property(非原子,分配)...)。

我的 viewWillDisappear 看起来像这样:

- (void)viewWillDisappear:(BOOL)animated {
NSLog(@"%s", __FUNCTION__);

if (![self.navigationController.viewControllers containsObject:self]) {
// View has been popped! Important to distinguish between view popping and tab switching.
// If parent view controller is active, pass a message.
if (_refParentViewController && !_isSearchViewController) {
_refParentViewController.valueX = @"xyz";
}
}

[super viewWillDisappear:animated];
}

现在,有一种情况是执行以下语句(由 Controller 1):

[self.navigationController popToRootViewControllerAnimated:NO];

结果,我崩溃了,因为 _refParentViewController 是一个已释放的实例(此时)。如何检查 _refParentViewController 是否有效?我认为 View Controller / View 将按顺序被销毁,但似乎没有任何特定顺序,并且 Controller 2 在 Controller 3 之前被销毁。

我可以检查 retainCount 但我不确定这是否是一个好主意。

最佳答案

I can check retainCount but i'm not sure if that's a good idea.

这是一个可怕的想法; keepCount没用,不要调用它。请注意,retainCount 永远不会返回 0;它不能用于知道对象是否被释放。

如果您的父属性和子属性都是分配,那么谁负责保留 View Controller ?您需要一个能够跨越父/子属性的预期生命周期的retain

我建议您将child属性设为retain并将父属性保留为assign。您还需要确保当您将 child 设置为 nil 时(使用 retain 属性将release 只要您通过属性的 setter),您首先将子级的 parent 属性设置为 nil

关于iphone - navigationController popToRootViewController 和 viewWillDisappear,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6596531/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com