gpt4 book ai didi

iphone - 当应用程序转到后台时,我的 View Controller 被释放

转载 作者:行者123 更新时间:2023-11-29 04:03:40 26 4
gpt4 key购买 nike

当应用程序转到后台时,我的 View Controller 类会被释放。我正在使用 ARC。

我有一个 UIViewController,当应用程序变为事件状态并执行方法时,它会订阅通知。但是,一旦应用程序在后台运行大约 30 秒然后恢复,应用程序就会崩溃并显示“消息发送到已释放的实例”。

启用 Zombie 对象表明 View Controller 本身就是 Zombie。

谢谢!

我的 View Controller 的实例化(在 AppDelegate 中):

UIStoryboard *storyBoard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
MyViewController *myViewController = [storyBoard instantiateViewControllerWithIdentifier:@"MyViewController"];

AppDelegate中的前台通知:

- (void)applicationDidBecomeActive:(UIApplication *)application
{
[[NSNotificationCenter defaultCenter] postNotificationName:kNotificationForegrounded object:self];
}

View Controller 中的前台通知:

- (void)viewDidLoad {
[super viewDidLoad];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(resumeForeground) name:kNotificationForegrounded object:nil];
}

我尝试在 AppDelegate 中创建强引用,但 View Controller 仍然被释放:

@property (strong, nonatomic) MyViewController *myViewController;

我尝试将 View Controller 添加到数组中,并对 AppDelegae 中的数组进行强引用,但仍然得到相同的结果:

@property (strong, nonatomic) NSMutableArray *viewControllers;
//...
UIStoryboard *storyBoard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
MyViewController *myViewController = [storyBoard instantiateViewControllerWithIdentifier:@"MyViewController"];
self.viewControllers = [[NSMutableArray alloc] init];
[self.viewControllers addObject:myViewController];

最佳答案

这里有两个问题 - 您的应用程序委托(delegate)没有正确管理其对象的所有权,并且 View Controller 没有自行清理。

每次执行代码来实例化 MyViewController 时,您都可以通过用新实例替换 self.viewControllers 来释放所有现有 View Controller 的所有权。仅分配一次,并根据需要添加和删除对象。另外,您永远不会使用强属性,而仅使用同名的本地实例变量。您实际上应该确保您希望此代码一遍又一遍地运行(考虑到您描述的症状和信息,我认为是这样)。

此外,在 MyViewController 中,实现 dealloc (如果您已经实现,则添加到其中):

- (void)dealloc
{
[[NSNotificationCenter defaultCenter] removeObserver:self];
}

关于iphone - 当应用程序转到后台时,我的 View Controller 被释放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15528594/

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