Sobes.tech
Middle

მითხარით კონტროლერის სიცოცხლის ციკლებზე და როგორ იძახიან ისინი.

sobes.tech AI

პასუხი AI-სგან

UIViewController-ის ციკლი მოიცავს მეთოდებს, რომლებიც იძახიან მისი არსებობის გარკვეულ მომენტებში: შექმნიდან განადგურებამდე.

ძირითადი ციკლის მეთოდები:

  1. viewDidLoad():

    • იძახება, როდესაც კონტროლერის ხედვა იტვირთება მეხსიერებაში, მაგრამ ჯერ არ ჩანს ეკრანზე.
    • გამოიყენება მონაცემების ინიციალიზაციისა და UI ელემენტების კონფიგურაციისთვის, რომლებიც დამოკიდებული არ არის გეომეტრიის վրա.
    • იძახება მხოლოდ ერთხელ მთელი სიცოცხლის განმავლობაში.
  2. viewWillAppear(_ animated: Bool):

    • პირდაპირ იძახება მაშინ, როდესაც ხედვა გამოჩნდება ეკრანზე.
    • გამოიყენება ამოცანების შესასრულებლად, რომლებიც უნდა ხდებოდეს ყოველ ჯერზე, როდესაც ხედვა ხდება ხილული (მაგალითად, მონაცემების განახლება, ანიმაციები).
    • შეიძლება იძახოს რამდენჯერმე.
  3. viewDidAppear(_ animated: Bool):

    • იძახება, როდესაც ხედვა სრულად გამოჩნდება ეკრანზე და გახდება მომხმარებლისთვის ხილული.
    • შესაფერისია ანიმაციების ან სხვა ამოცანების დასაწყებად, რომლებიც საჭიროებს, რომ ხედვა სრულად იყოს მზად.
    • შეიძლება იძახოს რამდენჯერმე.
  4. viewWillDisappear(_ animated: Bool):

    • პირდაპირ იძახება მაშინ, როდესაც ხედვა წაიშლება ეკრანიდან (მაგალითად, სხვა ეკრანზე გადასვლისას).
    • გამოიყენება მდგომარეობის შენახვის ან ამოცანების შეჩერებისთვის, რომლებიც არ უნდა შესრულდეს, სანამ ხედვა არ არის ხილული (მაგალითად, დროის გამწყვეტი შეჩერება).
    • შეიძლება იძახოს რამდენჯერმე.
  5. viewDidDisappear(_ animated: Bool):

    • იძახება, როდესაც ხედვა სრულად წაიშლება ეკრანიდან.
    • გამოიყენება რესურსების გათავისუფლების ან ამოცანების შეჩერებისთვის, რომლებიც აღარ არის საჭირო, როდესაც ხედვა არ არის ხილული.
    • შეიძლება იძახოს რამდენჯერმე.
  6. viewWillLayoutSubviews():

    • იძახება, წინათ, როდესაც კონტროლერი იწყებს თავის ქვედიზბორდების განლაგებას.
    • გამოიყენება ცვლილებების შეტანისთვის კონსტრაინტებში ან ფრეიმებში ავტომატური განლაგების წინ.
    • შეიძლება იძახოს რამდენჯერმე.
  7. viewDidLayoutSubviews():

    • იძახება, როდესაც კონტროლერი დასრულებს ქვედიზბორდების განლაგებას.
    • გამოიყენება ამოცანების შესასრულებლად, რომლებიც დამოკიდებულია საბოლოო ზომებზე (მაგალითად, სქროლ-ინდიკატორების ან ჩრდილების კონფიგურაცია).
    • შეიძლება იძახოს რამდენჯერმე.
  8. didReceiveMemoryWarning():

    • იძახება, როდესაც ოპერაციული მეხსიერება დაბალია.
    • გამოიყენება რესურსების გათავისუფლებისთვის, რომლებიც მოგვიანებით შეიძლება კვლავ შეიქმნას.
  9. deinit:

    • იძახება პირდაპირ წინ, ვიდრე UIViewController ობიექტი დაინგრევა და მეხსიერებიდან გათავისუფლდება.
    • გამოიყენება საბოლოო სისუფთავისათვის, მაგალითად, დამკვირვებლების წაშლის ან ქსელური კავშირების დახურვისთვის.

კოლბაკების სია:

ტიპიური მეთოდების გამოძახების სია კონტროლერის გამოჩენის დროს:

  1. viewDidLoad()
  2. viewWillAppear(_ animated: Bool)
  3. viewWillLayoutSubviews()
  4. viewDidLayoutSubviews()
  5. viewDidAppear(_ animated: Bool)

კონტროლერის გაქრობის დროს:

  1. viewWillDisappear(_ animated: Bool)
  2. viewDidDisappear(_ animated: Bool)
  3. deinit (თუ კონტროლერი აღარ არის საჭირო)

შესაბამისი მაგალითი:

import UIKit

class MyViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        // UI-ის კონფიგურაცია, მონაცემების ინიციალიზაცია
        print("viewDidLoad")
    }

    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        // UI-ის განახლება გამოჩენის წინ
        print("viewWillAppear")
    }

    override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)
        // გამოჩენის შემდეგ, ანიმაციების დაწყება
        print("viewDidAppear")
    }

    override func viewWillDisappear(_ animated: Bool) {
        super.viewWillDisappear(animated)
        // მომზადება გაქრობისთვის, მდგომარეობის შენახვა
        print("viewWillDisappear")
    }

    override func viewDidDisappear(_ animated: Bool) {
        super.viewDidDisappear(animated)
        // გაქრობის დასრულება, რესურსების გაწმენდა
        print("viewDidDisappear")
    }
    
    override func viewWillLayoutSubviews() {
        super.viewWillLayoutSubviews()
        // ავტო-განლაგებამდე
        print("viewWillLayoutSubviews")
    }
    
    override func viewDidLayoutSubviews() {
        super.viewDidLayoutSubviews()
        // ავტო-განლაგების შემდეგ
        print("viewDidLayoutSubviews")
    }

    deinit {
        // რესურსების გაწმენდა
        print("deinit")
    }
}