ios - 如何使用 ARC 为 View Controller 正确释放和保留内存? - iOS

标签 ios xcode

使用 ARC 功能

record_audio_testViewController *view2 = [[record_audio_testViewController alloc] initWithNibName:@"record_audio_testViewController" bundle:nil];

    [self.view addSubview:view2.view];

使用上面的代码页面导航到 view2 页面但是我无法访问任何按钮..在 view2 中我按下了一个按钮我得到了错误

Exe_Bad_Access(代码=1 地址=012902)

如何正确释放内存????

但使用

[self.navigationController pushViewController:view2 animated:YES];

这个 popviewController 和 pushViewController 不工作..(无法导航 VIEW2 页面)

谁知道原因???

最佳答案

问题是您正在创建 View Controller ,但您没有使用它,而只是使用它的 View (但让 ARC 在超出范围时释放 View Controller 本身)。在 View Controller 之间转换时,您应该使用 pushViewController(如果您使用的是导航 Controller )或 presentModalViewController(如果您想要以模态方式呈现下一个 View ;在 iOS 5 中使用 presentViewController)。万一您使用容器 View Controller ,您甚至可以使用 transitionFromViewController 在 subview Controller 之间进行转换。参见 View Controller Programming Guide有关如何在 View Controller 之间转换的指导。但是在 WWDC 2011 session 102 中,Apple 明确建议您要确保 View Controller 的层次结构正确(通常反射(reflect)您的 View 层次结构);您不应该只添加 View 而忽略 View Controller 层次结构。

无论如何,在 View 之间转换的标准技术是使用导航 Controller (这就是为您提供带有“后退”按钮的标题栏的原因……如果您不想让它可见,您可以将其隐藏):

record_audio_testViewController *view2 = [[record_audio_testViewController alloc] initWithNibName:@"record_audio_testViewController" bundle:nil];

[self.navigationController pushViewController:view2 animated:YES];

// if non-ARC project, uncomment the following line
// [view2 release];

最后,如果你真的想使用你的技术将新 Controller 的 View 添加为当前 View Controller View 的 subview (这似乎不是一个好主意),你只需要确保 ARC当它超出范围时不会释放它。所以,不要让它超出范围,将新 View Controller 设为当前 View Controller 的 ivar,而不是当前方法的局部变量。这解决了 ARC 问题,但似乎不是一个好的技术,因为您可能应该在 View Controller 之间进行适当的转换,但我提出它是为了全面披露。

关于ios - 如何使用 ARC 为 View Controller 正确释放和保留内存? - iOS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10882330/

相关文章:

ios - 使用一组图像制作动画时,我应该考虑 iPad 4 的哪些限制?

ios - 尺寸检查器在 Xcode : there are no options showing 中不起作用

objective-c - 核心数据对象图到 XML 文件

ios - UITableView.SizeThatFits() 的尺寸错误

iphone - 修改动态 ScrollView 项

ios - 在设备上测试定位服务

ios - Xcode 4.5 - 崩溃日志未符号化

ios - SCNNode.position 静态?

objective-c - Xcode 调试器 - 为什么您只能逐步进入 Apple 框架代码?

ios - 显示空单元格的 TableView