gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 20:35:02 24 4
gpt4 key购买 nike

使用 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/

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