gpt4 book ai didi

iOS 7.1 removeFromSuperview 崩溃

转载 作者:技术小花猫 更新时间:2023-10-29 10:33:41 25 4
gpt4 key购买 nike

iOS 7.1 发布之前,我的应用程序没有发生任何崩溃。现在在任何 removeFromSuperview 方法上,崩溃。例如:我有 View Controller ,当我想删除一个 View Controller 时,我删除它的所有 subview ,然后从堆栈中删除(堆栈:我在其中存储 View Controller ,用于加载新内容,并加载以前的内容):

    for (UIView *subView in [contentVc subviews])
[subView removeFromSuperview];

我得到了

-[CALayer retain]: message sent to deallocated instance

留言

[actual removeFromParentViewController];

是去除它的好方法吗?它会释放整个 View Controller 及其 subview 吗?因为我的应用程序没有崩溃,而不是 removeFromSuperview。我不明白 iOS 7.1 中发生了什么变化。

以及如何在不使用 removeFromSuperview 并且不删除我的 ViewController 的情况下删除 viewController 中的所有 subview (如果我只想添加新的 subview ,并删除当前内容)?

更新:

有时会崩溃:

[myactualviewcontroller.view removeFromSuperview];

-[CALayer retain]: message sent to deallocated instance

为什么???

有时,如果我尝试从 View Controller View 中删除主 subview ,它也会发生同样的崩溃:

[mainView removeFromSuperview](mainView 是一个单独的 UIView,添加到 vc.view 中)

UPDATE2:(非常详细)

所以,我有一个容器 View 。我正在向此容器添加一个 UIViewController.view。我将 View 作为 subview 添加到 UIViewController.view。这个 View 不是本地 uiview,我的意思是,它声明为 implementation{ UIView* mainView } 。当我的 UIViewController 将被释放时,在其 - (void) dealloc { [mainView removeFromSuperview] ; [mainView release] [super dealloc];}在 mainView removeFromSuperview 我的应用崩溃了。

最佳答案

在快速枚举数组时修改数组通常不是一个好主意。您似乎在 View 的 subview 数组上使用快速枚举,并同时修改该数组(通过删除 subview )。你可以尝试这样的事情:

NSArray *subviewsCopy = [[contentVc subviews] copy];
for (UIView *subview in subviewsCopy) {
[subview removeFromSuperview];
}

但是,正如其他一些人所提到的,您需要手动删除这些 subview 有点奇怪。在正常情况下, View Controller 的 View (及其下的 View 层次结构)将在 View Controller 本身被释放时自动清理。

还有一些可用的好工具可以帮助您追踪问题的根源。特别是,您应该分析您的应用程序(在 Xcode 中,在 Product 菜单下)并在 Instruments 提示您时选择 Zombies 工具。借助 Zombies,您可以查看在对象被释放后收到消息的对象的保留/释放历史。

如果您因为怀疑 View 会被泄露而尝试手动清理 View 层次结构,我建议您也尝试 Instruments 中的 Leaks 工具并验证当禁用此代码时相关 View 实际上是泄露。

关于iOS 7.1 removeFromSuperview 崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22331765/

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