Kode Swift saya ada di bawah. Saya telah menggunakan self dalam penutupan tetapi ketika saya menjalankan proyek, grafik memori tidak menunjukkan siklus penyimpanan. Saya salah tentang ada siklus retensi?

class ViewController: UIViewController {

    private var counter = 0

    private var closure : (() -> ()) = { }

    func foo() {
        closure()
    }

    override func viewDidLoad() {
        super.viewDidLoad()

        closure = {
            self.counter += 1
            print(self.counter)
        }
    }

}
2
ahmetvefa53 10 Maret 2020, 16:36

1 menjawab

Jawaban Terbaik

Ya, Xcode tidak selalu secara visual mewakili siklus referensi yang kuat. Tetapi konsisten dalam menunjukkan bahwa objek yang dimaksud belum dialokasikan.

Misalnya, jika saya mendorong melalui pengontrol navigasi dan muncul, saya melihat ViewController dalam daftar objek langsung, tetapi ketika saya memilihnya, tidak melihat siklus apa pun, melainkan melihat beberapa grafik samar termasuk navigasi controller (meskipun saya mematikannya):

enter image description here

Yang telah dikatakan, saya menemukan bahwa jika saya menyajikan secara modal dan mengabaikan pengontrol tampilan yang dimaksud, saya akan melihat siklus lebih jelas:

enter image description here

Alangkah baiknya jika kita bisa melihat siklus prototipikal (seperti yang ditunjukkan di bawah), tetapi gambarnya tidak selalu sesederhana itu ketika berhadapan dengan objek UIKit.

enter image description here

2
Rob 10 Maret 2020, 15:40