ios应用程序在后台时的内存管理

时间:2019-01-02 05:44:45

标签: ios objective-c

根据官方教程,iOS应用程序具有几个主要状态,例如前景,背景和挂起状态。屏幕顶部位于页面顶部的正在使用的应用程序为前景状态,然后,当按下主屏幕按钮或使用其他应用程序时,该应用程序处于后台状态。此后,根据手机系统资源的不同,挂起的APP可能会随时被杀死。这是可以在网上找到的信息。

接下来是我遇到的问题。在后台工作了很长时间之后,我进入了我再次开发的应用程序,发现我直接进入了上次使用的视图页面(图片附在下面。当在前台使用该应用程序时,当前登录的用户名用户名显示在头像下方。从后台返回到前台时,头像下的用户名变为空)。这意味着APP尚未被杀死,但是页面上的数据丢失了,并且内存中的某些数据也部分丢失了。感觉与应用程序有关的内存已被系统部分恢复。这让我很困惑。

关于状态保存和恢复过程,我没有做任何工作。重新启动应用程序时,我不需要记住应用程序先前使用的状态信息。我需要做的就是确保当应用程序从后台返回到前台时,完全恢复该应用程序占用的内存。

提示:上面提到的从背景返回到前景的表达式中的背景表示背景或暂停状态

view when app back to the foreground

这是我在AppDelegate中的代码

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

    if(launchOptions != nil) {
       /*remote message push related code*/
    }

    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    [self.window makeKeyAndVisible];
    return YES;
}

#pragma mark - APNS
- (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error {

}

- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken
{
    /**/
}

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult result))handler {
   /*processing code when receiving a message push*/
}

- (void)userNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void (^)())completionHandler{
    /*processing code when receiving a message push*/
}


#pragma mark - application state
- (void)applicationWillResignActive:(UIApplication *)application {
    self.isRunningForeground = NO;
}

- (void)applicationDidEnterBackground:(UIApplication *)application {
}

- (void)applicationWillEnterForeground:(UIApplication *)application {
}

- (void)applicationDidBecomeActive:(UIApplication *)application {
    self.isRunningForeground = YES;
}

- (void)applicationWillTerminate:(UIApplication *)application {

}

我的iphone是运行iOS 11的6sp手机。我使用ARC开发应用。

0 个答案:

没有答案