Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/116.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如果按下home(主页)按钮,应用程序中是否存在变量?_Ios_Arrays - Fatal编程技术网

Ios 如果按下home(主页)按钮,应用程序中是否存在变量?

Ios 如果按下home(主页)按钮,应用程序中是否存在变量?,ios,arrays,Ios,Arrays,我有一个允许用户互相发送消息的应用程序。这些消息存储在用户手机的SQL库中。我有一个数组(包含所有对话)和一个数组(包含单个对话),手机实际使用该数组填充标签值。这个数组,[[pulledMessage]],由应用程序的didFinishLaunching从SQL中填充,工作正常。我可以将任何新消息写入用户的SQL库,还可以更新该数组。我的问题是,我是否必须将SQL数据重新加载到应用程序的viewDidLoad上的数组中(因为新消息将添加到对话中,但不会从SQL加载,因为加载在didFinish

我有一个允许用户互相发送消息的应用程序。这些消息存储在用户手机的SQL库中。我有一个数组(包含所有对话)和一个数组(包含单个对话),手机实际使用该数组填充标签值。这个数组,
[[pulledMessage]]
,由应用程序的
didFinishLaunching
从SQL中填充,工作正常。我可以将任何新消息写入用户的SQL库,还可以更新该数组。我的问题是,我是否必须将SQL数据重新加载到应用程序的
viewDidLoad
上的数组中(因为新消息将添加到对话中,但不会从SQL加载,因为加载在
didFinishLaunching
)。这通常不会产生问题(因为在更新数组的同时填充SQL库基本上与从SQL加载到数组中是一样的),但是当用户“关闭”应用程序时会发生什么。我不是指硬关闭,比如终止它。我的意思是,就像按下home(主页)按钮,它仍然在后台。
[[pulledMessage]]
是否持续存在,以便我不需要重新运行其填充(并因此将加载放入
viewDidLoad
),或者我需要这样做

当应用程序被挂起(通过点击home按钮)并且用户重新启动时,应用程序将再次进入前台状态,并且内存中的所有内容仍然存在。但是,在这种情况下,
viewDidLoad
无论如何都不会被调用,所以这并不重要

您将看到再次调用
didfishLaunching
viewDidLoad
的唯一时间是由于某种原因终止应用程序。而且不仅仅是用户明确终止了你的应用程序。如果您的应用程序被挂起,用户启动另一个需要大量内存的应用程序,导致操作系统丢弃您的应用程序,也可能发生这种情况。一旦你的应用程序被挂起,它可能会因为你无法控制的因素而被终止,所以你应该优雅地处理这个问题。但它通常不会被终止,而是留在内存中,并且这些方法不会再次被调用

因此,底线是,如果您看到调用了
didfishLaunching
viewDidLoad
各种方法,这意味着应用程序已完全重新启动,在这种情况下,您需要重新加载数据结构


为了让您能够看到应用程序生命周期的运行,我在应用程序生命周期的关键事件中添加了
os\u log
语句。我使用了统一的日志记录系统(参见WWDC 2016视频),因此当不从Xcode运行应用程序时,我可以从macOS“控制台”应用程序观察行为;从Xcode运行它可以改变应用程序生命周期行为。然后,当我从设备(不是Xcode)启动应用程序时,我在macOS“控制台”应用程序中观看了这些。这就是我看到的:

用户首次启动应用程序:

debug 14:46:25.256978 -0700 MyApp com.domain.MyApp AppDelegate didFinishLaunching debug 14:46:25.258476 -0700 MyApp com.domain.MyApp ViewController viewDidLoad debug 14:46:25.258550 -0700 MyApp com.domain.MyApp ViewController viewWillAppear debug 14:46:25.261261 -0700 MyApp com.domain.MyApp ViewController viewDidAppear debug 14:46:25.300246 -0700 MyApp com.domain.MyApp AppDelegate applicationDidBecomeActive 和视图控制器代码:

//  ViewController.swift

import UIKit
import os.log

private let log = OSLog(subsystem: "com.domain.MyApp", category: "ViewController")

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        os_log("viewDidLoad", log: log, type: .debug)
    }

    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)

        os_log("viewWillAppear", log: log, type: .debug)
    }

    override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)

        os_log("viewDidAppear", log: log, type: .debug)
    }

    override func viewWillDisappear(_ animated: Bool) {
        super.viewWillDisappear(animated)

        os_log("viewWillDisappear", log: log, type: .debug)
    }

    override func viewDidDisappear(_ animated: Bool) {
        super.viewDidDisappear(animated)

        os_log("viewDidDisappear", log: log, type: .debug)
    }
}

我可能还会让您参考iOS应用程序编程指南:应用程序生命周期中的和部分以了解更多信息

debug 14:47:09.263330 -0700 MyApp com.domain.MyApp AppDelegate applicationWillEnterForeground debug 14:47:09.274849 -0700 MyApp com.domain.MyApp AppDelegate applicationDidBecomeActive
//  AppDelegate.swift

import UIKit
import os.log

private let log = OSLog(subsystem: "com.domain.MyApp", category: "AppDelegate")

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {

    var window: UIWindow?

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
        os_log("didFinishLaunching", log: log, type: .debug)
        return true
    }

    func applicationWillResignActive(_ application: UIApplication) {
        os_log("applicationWillResignActive", log: log, type: .debug)
    }

    func applicationDidEnterBackground(_ application: UIApplication) {
        os_log("applicationDidEnterBackground", log: log, type: .debug)
    }

    func applicationWillEnterForeground(_ application: UIApplication) {
        os_log("applicationWillEnterForeground", log: log, type: .debug)
    }

    func applicationDidBecomeActive(_ application: UIApplication) {
        os_log("applicationDidBecomeActive", log: log, type: .debug)
    }

    func applicationWillTerminate(_ application: UIApplication) {
        os_log("applicationWillTerminate", log: log, type: .debug)
    }

}
//  ViewController.swift

import UIKit
import os.log

private let log = OSLog(subsystem: "com.domain.MyApp", category: "ViewController")

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        os_log("viewDidLoad", log: log, type: .debug)
    }

    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)

        os_log("viewWillAppear", log: log, type: .debug)
    }

    override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)

        os_log("viewDidAppear", log: log, type: .debug)
    }

    override func viewWillDisappear(_ animated: Bool) {
        super.viewWillDisappear(animated)

        os_log("viewWillDisappear", log: log, type: .debug)
    }

    override func viewDidDisappear(_ animated: Bool) {
        super.viewDidDisappear(animated)

        os_log("viewDidDisappear", log: log, type: .debug)
    }
}