iOS 7.1 删除超级视图崩溃

2024-01-10

我的应用程序没有发生任何崩溃,直到iOS 7.1出来。现在在任何removeFromSuperview方法,崩溃。例如:我有视图控制器,当我想删除视图控制器时,我删除它的所有子视图,然后从堆栈中删除(堆栈:我在其中存储视图控制器,用于加载新内容,并加载之前的内容):

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

我得到了

-[CALayer保留]:发送到已释放实例的消息

message

[actual removeFromParentViewController];

有什么好的方法可以去除吗?它会释放整个视图控制器及其子视图吗?因为我的应用程序不会崩溃,而不是removeFromSuperview。我不明白 iOS 7.1 中发生了什么变化。

我怎样才能删除所有子视图viewController没有removeFromSuperview,并且无需删除我的ViewController(如果我只想添加新的子视图,并删除当前的内容)?

UPDATE:

有时会崩溃:

[myactualviewcontroller.view removeFromSuperview];

-[CALayer保留]:发送到已释放实例的消息

Why???

有时,如果我尝试从视图控制器视图中删除主子视图,它会发生相同的崩溃:

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

UPDATE2:(很详细)

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


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

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

然而,正如其他一些人提到的,您需要费力手动删除这些子视图,这有点奇怪。在正常情况下,当视图控制器本身被释放时,视图控制器的视图(及其下的视图层次结构)将被自动清理。

还有一些很好的工具可以帮助您追踪问题的根源。特别是,您应该分析您的应用程序(在 Xcode 中的“产品”菜单下),并在 Instruments 提示您时选择“僵尸”工具。使用 Zombies,您可以查看释放后发送消息的对象的保留/释放历史记录。

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

iOS 7.1 删除超级视图崩溃 的相关文章

随机推荐

  • Python threading.Event() - 确保所有等待线程在 event.set() 上唤醒

    我有许多线程等待事件 执行某些操作 然后再次等待事件 另一个线程将在适当的时候触发该事件 我无法找到一种方法来确保每个等待线程在设置事件时恰好触发一次 我目前已将触发线程设置为休眠一段时间 然后清除它 不幸的是 这会导致等待线程多次抓取设置
  • 如果在 IE9 中查看,请替换脚本?

    根据用户浏览器运行不同的 JavaScript 有多容易 例如 如果有人使用 IE9 访问该网站 我希望它运行与 Chrome 用户正常运行的脚本不同的脚本 您可以使用有条件的评论 http www quirksmode org css c
  • Google Cloud“ascii”编解码器在安装过程中无法解码字节 0xe1

    我正在尝试安装 GoogleCloudSDK 但在安装过程中出现以下错误 Output folder C Program Files x86 Google Cloud SDK Downloading Google Cloud SDK cor
  • SQL Server:无循环的排列/组合

    我有两个数据集 第一个是产品配方表以及构成该配方的产品 第二个数据集包含按产品分类的单独定价 我可以为单个产品设置多个价格 我想要实现的是输出一个结果集 其中包含每个产品配方的独特排列 只有所有组件在第二个数据集中都有定价的配方才应出现在输
  • 下一个和上一个元素的CSS选择器[重复]

    这个问题在这里已经有答案了 如何单独定位列表元素 例如我想要 Html ul class roundabout holder li class roundabout moveable item li li class roundabout
  • 如何从 .NET 客户端应用程序加载 URL

    使用 C 和 NET 框架从 Windows 上的胖客户端应用程序打开 URL 的首选方法是什么 我希望它使用默认浏览器 下面的代码肯定有效 Process Start http www yoururl com Blah aspx 它会打开
  • 读取启动盘上的扇区

    这是我的问题的延续读取超级块 https stackoverflow com questions 339795 reading the superblock 假设我想以 Mac OS X 中的 HFS 文件系统为目标 我如何读取启动盘的第
  • 以编程方式更改 Windows 10 锁定屏幕背景(在桌面上)

    如何以编程方式更改 设置锁定屏幕背景图像 使用 VB NET C 或 Visual C 我使用的是 Win 10 Pro 并拥有 Visual Studio 2017 Pro 我在网上查了一下 但大多数解决方案似乎都不起作用 例如 Both
  • Achartengine - Android 中条形图的不同条形颜色

    我在 android 中使用创建了一张图表图表引擎 http achartengine org图书馆 我想用不同的颜色显示每个栏 我能做什么 请给我一些建议 提前致谢 只需查看给出的答案here https stackoverflow co
  • 在 django 中使用 Crispy_forms 时,“FormHelper”对象没有属性“append”

    我是 Django 的新手 我正在尝试使用脆脆的表单来设计表单的样式 我的应用程序中有一个表单 它恰好是一个模型表单 我已经遵循了此处所说的内容https stackoverflow com a 13201588 1076075 https
  • Laravel 5.x 数据库触发器和可能的最佳实践

    这篇文章的目的是提供信息并提出问题 大家好 我正在开发一个可以充分利用触发器的大型系统 我们目前正在使用 phpmyadmin 在 Laravel 5 2 和 php 7 上运行服务器端 在 Laravel 中 并没有太多关于如何通过迁移使
  • 概括 python 脚本以在目录中的所有文件上运行

    我有以下 python 脚本 with open ein csv r as istr with open aus csv w as ostr for line in istr line line rstrip n 1 print line
  • 这是一个指针吗? (如果是的话,它是如何初始化的?)

    有一个头文件 esUtil h 其中定义了一个名为 ESContext 的结构 其成员之一是 userData userData 是一个指向 void 的指针 使用它的程序主体如下 include esUtil h typedef stru
  • Facebook Connect for iOS:dialogDidComplete 响应区分

    我想知道如何区分用户在内联后流 FBDialog 中点击 提交 或 跳过 有谁知道要测试什么吗 我在 iOS 4 2 环境中使用最新的 iOS Facebook Connect Called when a UIServer Dialog s
  • 再次重新处理/读取Kafka记录/消息 - Consumer Group Offset Reset的目的是什么?

    我的 kafka 主题总共有 10 条记录 消息 2 个分区 每个分区有 5 条消息 我的消费者组有 2 个消费者 每个消费者已经分别从其分配的分区读取了 5 条消息 现在 我想从开始 开始 偏移量 0 重新处理 读取我的主题中的消息 我停
  • 带注释的收藏袋

    我正在观看一个由 制作的精彩视频伯特 贝克威斯 http www infoq com presentations GORM Performance http www infoq com presentations GORM Performa
  • 无法检索 Eclipse 插件中选定的 java 文件名/路径

    我正在开发一个插件 需要 检索 java 文件的路径 文件名 我编写的代码成功检索了 xml 或清单文件的文件名 路径 但无法检索包中 Java 文件的路径 我使用的代码是 if IStructuredSelection 的选择实例 Obj
  • 如何在Vue JS中动态渲染组件?

    我正在制作一个表单生成器 它使用其中的组件作为输入字段 按钮等 我希望能够根据我传递给它的选项来生成表单 但我无法让它渲染组件 我尝试返回纯 HTML 但这不会渲染组件 我从 Home vue 模板中调用表单生成器 我希望表单具有如下所示的
  • 线程池并行处理消息,但保留对话中的顺序

    我需要并行处理消息 但保留具有相同会话 ID 的消息的处理顺序 Example 让我们像这样定义一个消息 class Message Message long id long conversationId String someData 假
  • iOS 7.1 删除超级视图崩溃

    我的应用程序没有发生任何崩溃 直到iOS 7 1出来 现在在任何removeFromSuperview方法 崩溃 例如 我有视图控制器 当我想删除视图控制器时 我删除它的所有子视图 然后从堆栈中删除 堆栈 我在其中存储视图控制器 用于加载新