Middle
Ilova to'xtatilgandan keyin faoliyat ko'rsatkichi nima uchun davom etmoqda?
sobes.tech AI
AIdan javob
iOS 11-dək olan versiyalarda, aktivlik göstəricisi (UIActivityIndicatorView) stopAnimating() metodu çağırıldıqda belə animasiya davam edirdi, lakin görünüm nəzarətçisi və ya onun valideyn nəzarətçisi yaddaşdan tam çıxarılmamışdı. Göstərici sadəcə vizual olaraq göstərilməyi dayandırırdı, lakin daxili vəziyyəti "animasiya edən" qalırdı.
iOS 11 ilə davranış dəyişdi. İndi, stopAnimating() həqiqətən animasiyanı dayandırır və göstəricinin daxili vəziyyətini dəyişir.
Köhnə iOS versiyaları və ya kodda potensial səhvlər haqqında danışarkən, səbəb aşağıdakı ola bilər:
- VC-nin həyat dövrü ilə bağlı problem:
stopAnimating()lazım olmayan həyat dövrü vəziyyətlərində çağırılır (məsələn, yalnızviewWillDisappear-də, ammaviewDidDisappear-də və ya səhvləri idarə edərkən). - Obyektin düzgün idarə olunmaması: Göstərici yaddaşda mövcuddur və onun vəziyyəti düzgün şəkildə sıfırlanmırsa, düzgün şəkildə sərbəst buraxılmır və ya güclü istinadlar onun sərbəst buraxılmasını əngəlləyir.
- Çox iş parçacığı ilə səhvlər:
stopAnimating()çağırışı əsas iş parçacığından kənarda baş verir, halbuki UI elementlərinin animasiyasını yalnız əsas iş parçacığından idarə etmək mümkündür.
// Əsas iş parçacığında düzgün çağırış nümunəsi
DispatchQueue.main.async {
activityIndicator.stopAnimating()
}
- Görünüşlərin hierarxiyası ilə problem: Göstərici olan görünüş ana görünümdən silinməyib və ya tamamilə gizlədilməyib.
// Superview-dan silinmə nümunəsi
activityIndicator.removeFromSuperview()
// Gizlətmə nümunəsi
activityIndicator.isHidden = true
- Auto Layout ilə işləmədə səhvlər: Göstərici hələ də yer tutur və ya animasiyanın dayandırılmasından sonra ölçüləri sıfırlanmır, bu da aktivlik və ya mövcudluq illüziyasını yaradır.
Müasir iOS versiyalarında bu problem nadirdir və adətən obyektlərin həyat dövrünün idarə olunması və ya çox iş parçacığı ilə bağlı səhvlərlə əlaqəlidir.