Эквивалент onDestroy() для IOS

Я ищу быстрый метод, который действует как onDestroy() в android. Я хочу, чтобы он не вызывался при нажатии кнопки «Домой», его следует вызывать только при полном выходе из приложения. Я пытался использовать метод deinit, но он так и не был вызван.


person cvrattos    schedule 07.08.2017    source источник


Ответы (4)


Подходящим эквивалентом в среде iOS является applicationWillTerminate(_:) внутри AppDelegate.

Имейте в виду, что асинхронные операции не могут выполняться должным образом.

person Tamás Sengel    schedule 07.08.2017
comment
Я не думаю, что applicationDidFinishLaunching — правильный метод. Я хочу тот, который вызывается, когда приложение закрыто (например, пользователь дважды щелкает кнопку «Домой», а затем проводит пальцем вверх) - person cvrattos; 07.08.2017
comment
Проверьте мой отредактированный ответ. - person Tamás Sengel; 07.08.2017

Если пользователь нажал кнопку «Домой» и перешел в экранное меню телефона, то приложение находится в фоновом состоянии. Эта функция будет вызываться:

optional func applicationDidEnterBackground(_ application: UIApplication)

Если пользователь закрыл приложение, дважды нажав кнопку «Домой» и проведя пальцем вверх по приложению, или проведя приложение в фоновом режиме более 3 минут, будет вызван этот метод:

optional func applicationWillTerminate(_ application: UIApplication)

Обе функции уже есть в вашем классе AppDelegate.

Надеюсь это поможет!

person Mohammad Bashir Sidani    schedule 07.08.2017
comment
Я попробовал метод applicationWillTerminate, но когда я попытался запустить его, я получил эту ошибку: «необязательный» может применяться только к членам протокола - person cvrattos; 07.08.2017
comment
Вы имеете в виду, что когда вы завершаете работу, xcode выдает ошибку? можете ли вы выполнить печать (тест) внутри этого метода и поставить на нем точку останова? чтобы увидеть это он достигает его? - person Mohammad Bashir Sidani; 07.08.2017
comment
Извините, я имею в виду, что я вставил ваш код в свой редактор, и симулятор даже не запустился. Сборка не удалась. - person cvrattos; 07.08.2017
comment
Ой. Неважно, я разобрался со своей проблемой. Спасибо - person cvrattos; 07.08.2017
comment
вы нашли его в классе AppDelegate? если мой ответ решил вашу проблему, прошу вас отметить его как правильный. Спасибо! - person Mohammad Bashir Sidani; 07.08.2017

Эквивалент iOS не существует. Ты можешь использовать

optional func applicationWillResignActive(_ application: UIApplication)

он вызывается, когда приложение выходит из состояния переднего плана.

or

optional func applicationWillTerminate(_ application: UIApplication)

этот вызывается только во время работы приложения, т. е. в большинстве случаев он не будет вызываться, когда приложение находится в фоновом режиме, если только оно не имеет специальных разрешений.

deinit не будет вызываться при завершении работы приложения, потому что его цель — выполниться при уничтожении объекта для освобождения памяти. Когда приложение завершается, весь процесс уничтожается вместе со стеком памяти, поэтому освобождать память бессмысленно.

person Max Pevsner    schedule 07.08.2017

Раньше в iOS был метод viewDidUnload, но он устарел с iOS 6. Другой вариант, поскольку многие люди упоминают applicationWillTerminate, вы могли бы зарегистрироваться для получения уведомления UIApplicationWillTerminate, связать его с функцией и делать в нем все, что хотите. функции, такие как очистка и тому подобное.

person Alan    schedule 07.08.2017