ใน WWDC 2014 เซสชั่น 403 Intermediate Swiftและการถอดเสียงมีสไลด์ดังต่อไปนี้
ลำโพงพูดในกรณีนั้นถ้าเราไม่ใช้[unowned self]
ตรงนั้นมันจะเป็นความจำรั่ว หมายความว่าเราควรใช้[unowned self]
การปิดภายในเสมอหรือไม่?
บนเส้น 64 ViewController.swift ของ app Swift อากาศ , [unowned self]
ฉันไม่ได้ใช้ แต่ผมปรับปรุง UI โดยใช้บางส่วน@IBOutlet
เหมือนและself.temperature
self.loadingIndicator
มันอาจจะตกลงเพราะทุกวินาทีฉันที่กำหนดไว้@IBOutlet
weak
แต่เพื่อความปลอดภัยเราควรใช้อยู่เสมอ[unowned self]
?
class TempNotifier {
var onChange: (Int) -> Void = {_ in }
var currentTemp = 72
init() {
onChange = { [unowned self] temp in
self.currentTemp = temp
}
}
}
onChange
ควรจะ[weak self]
ปิดเพราะมันเป็นที่สาธารณะ (ภายใน แต่ยังคง) คุณสมบัติดังนั้นวัตถุอื่นอาจจะได้รับการจัดเก็บและการปิดการเก็บรักษาวัตถุ TempNotifier รอบ(ไปเรื่อย ๆ ถ้า โดยใช้วัตถุที่ไม่ปล่อยให้ไปของonChange
การปิดจนกว่าจะเห็นความTempNotifier
เป็นไปผ่านโทษอ่อนแอของตัวเองไปTempNotifier
) ถ้าvar onChange …
เป็นเช่นprivate var onChange …
นั้น[unowned self]
จะถูกต้อง ฉันไม่แน่ใจ 100% ของสิ่งนี้แม้ว่า; ใครบางคนที่ถูกต้องฉันโปรดถ้าฉันผิด
[]
? ฉันไม่พบคำอธิบายในเอกสารของ Apple
{}
คือการปิดที่ว่างเปล่า (ตัวอย่างของการปิด) เป็นค่าเริ่มต้น (ไม่ได้ทำอะไรเลย) (Int) -> Void
คือคำจำกัดความการปิด