Middle
Miks jätkab tegevusnäitaja töötamist pärast rakenduse sulgemist?
sobes.tech AI
Vastus AI-lt
Põhjus on see, et iOS 11-ni enne jätkas iOS-is aktiivsuse näitaja (UIActivityIndicatorView) animatsiooni, isegi kui tema stopAnimating() meetod oli kutsutud, kuid ise vaatekontroller või tema vanemkontroller ei olnud täielikult mälust eemaldatud. Näitaja lihtsalt lõpetas visuaalselt kuvamise, kuid tema sisemine seisund jäi "animeerivaks".
Alates iOS 11 on käitumine muutunud. Nüüd stopAnimating() tõesti peatab animatsiooni ja muudab näitaja sisemise seisundi.
Kui rääkida vanematest iOS-versioonidest või võimalike vigade kohta koodis, võib põhjus olla järgmine:
- VC elutsükli probleem:
stopAnimating()kutsutakse mitte kõigis vajalikes elutsükli seisundites (näiteks ainultviewWillDisappear, kuid mitteviewDidDisappearvõi vigade töötlemisel). - Objekti vale haldamine: Näitaja jätkab olemasolu mälus ja tema seisund ei taastata, kui ta ei vabastata korralikult või kui sellele on tugevad viited, mis takistavad vabastamist.
- Mitme niidi vead:
stopAnimating()kutsutakse peamisel niidil, samas kui UI elementide animatsioone saab juhtida ainult peamisest niidist:
// Õige kutsumine peamisel niidil
DispatchQueue.main.async {
activityIndicator.stopAnimating()
}
- Vaadete hierarhia probleem: Vaade, mis sisaldab näitaja, ei ole eemaldatud supervaatest või ei ole täielikult peidetud:
// Eemaldamise näide supervaatest
activityIndicator.removeFromSuperview()
// Peitmise näide
activityIndicator.isHidden = true
- Auto Layouti vead: Näitaja jätkab ruumi hõivamist või tema suurused ei uuene pärast animatsiooni peatamist, luues illusiooni aktiivsusest või kohalolekust.
Kaasaegsetes iOS-versioonides on selline probleem haruldane ja tavaliselt seotud objektide elutsükli haldamise või mitme niidi vigadega.