handler
UIAlertAction
'un kapağını yazarken, self
numaralı başvuru kaynağının güçlü olması (varsayılan), weak
veya unowned
?Kendini bir UIAlertAction işleyicisinde güçlü olarak yakalanmalı mı?
Orada bu konu (1, 2, 3, 4) ilgili mesajlar olmuştur ama bu durumda nasıl yardımcı dürüst görmüyorum. Bu tipik kodu
edelim odağı:
func tappedQuitButton() {
let alert = UIAlertController(title: "Confirm quit", message: nil, preferredStyle: .ActionSheet)
let quitAction = UIAlertAction(title: "Quit", style: .Default) { (action) in
self.dismissViewControllerAnimated(true, completion: nil)
}
alert.addAction(quitAction)
let cancelAction = UIAlertAction(title: "Cancel", style: .Default) { (action) in
self.dismissViewControllerAnimated(true, completion: nil)
}
alert.addAction(cancelAction)
presentViewController(alert, animated: true, completion: nil)
}
Bu yüzden self
uyarısı sunan görünümü denetleyicisi olan bir UIViewController
alt sınıf içinde bir fonksiyondur.
documentation diyor ki: O referans ömrünün bir noktasında “hiçbir değeri” olması için
mümkün olduğunda başvuru çevreleri önlemek için zayıf bir başvuru kullanın. Referans her zaman bir değere sahipse, bunun yerine meşru olmayan bir referans kullanın.
Kör olabilir, ancak bunun UIAlertAction
hakkındaki sorumu yanıtlamaya nasıl yardımcı olduğunu hala göremiyorum.
Yukarıdaki kodda, hayatının bir noktasındanil olabilir mi? Evet. Bu yüzden self
'u weak
olarak işaretlemeliyim.
Ama sonra tekrar kapatıldığında, self
'un kapanacağı makul bir senaryoyu düşünemiyorum. Bu kapanma söz konusu olduğunda, self
her zaman bir değere sahip olacaktır. Bu yüzden self
'u unowned
olarak işaretlemeliyim.
Yani, bir UIAlertAction işleyicisinde self
nasıl yakalanmalıdır?
Bunu "sahiplik" açısından görmek için zor bir zamanım var. Neden örnek çağıran örnek yöntemindeki yerel değişkenler neden örnek olarak adlandırılmamış ..? – Eric
Yerel değişkenler yığına yerleştirilir ... ve yalnızca yığın/işlevin ömrü boyunca yaşayacaktır. Bunu oluşturduktan sonra, çağrılan işlevin kapsamı dışına çıktıktan sonra ömrünü yönetmek için görüntüleme denetleyicisine kalmıştır. Bu durumda, uyarının kendini tutması gerekir, ancak kendini daha az umursamaz. Fonksiyon çağrıldıktan sonra uyarı, başka bir şey (sunum yapan kontrolör) bununla ilgileniyor. –
Bu nedenle, uyarı yerel bir değişkendir ise, kendi kendine güçlü bir referans tutmak her zaman tamam, aksi takdirde uyarı bir özellik ise, o zaman kendini zayıf bir referans tutmalıdır. Doğru? – Eric