Dalam WWDC 2014 sesi 403 Intermediate Swift dan transkrip , ada slide berikut
Pembicara mengatakan dalam kasus itu, jika kita tidak menggunakannya di [unowned self]
sana, itu akan menjadi kebocoran memori. Apakah itu berarti kita harus selalu menggunakan [unowned self]
penutupan di dalam?
Pada baris 64 dari ViewController.swift dari aplikasi Swift Weather , saya tidak menggunakan [unowned self]
. Tapi saya memperbarui UI dengan menggunakan beberapa @IBOutlet
s seperti self.temperature
dan self.loadingIndicator
. Mungkin OK karena semua @IBOutlet
yang saya definisikan adalah weak
. Tetapi untuk keamanan, haruskah kita selalu menggunakan [unowned self]
?
class TempNotifier {
var onChange: (Int) -> Void = {_ in }
var currentTemp = 72
init() {
onChange = { [unowned self] temp in
self.currentTemp = temp
}
}
}
onChange
harusnya merupakan [weak self]
penutupan, karena itu properti publik (internal, tetapi masih), sehingga objek lain bisa mendapatkan dan menyimpan penutupan, menjaga objek TempNotifier tetap ada (tanpa batas waktu jika objek menggunakan tidak melepaskan onChange
penutupan sampai ia melihat TempNotifier
hilang, melalui referensi lemah sendiri ke TempNotifier
) . Jika var onChange …
dulu private var onChange …
maka [unowned self]
akan benar. Saya tidak 100% yakin akan hal ini; tolong koreksi seseorang jika saya salah.
[]
? Saya tidak dapat menemukan penjelasan di dokumen Apple.
{}
adalah closure kosong (instance dari closure) sebagai default (tidak melakukan apa-apa), (Int) -> Void
adalah definisi closure.