รุ่นที่ดีกว่า
__strong typeof(self) strongSelf = weakSelf;
สร้างการอ้างอิงที่รัดกุมสำหรับเวอร์ชันที่อ่อนแอนั้นเป็นบรรทัดแรกในบล็อกของคุณ หากตัวเองยังคงมีอยู่เมื่อบล็อกเริ่มดำเนินการและไม่ได้กลับไปที่ศูนย์บรรทัดนี้จะทำให้มั่นใจได้ว่ามันจะยังคงอยู่ตลอดอายุการใช้งานของบล็อก
ดังนั้นสิ่งทั้งหมดจะเป็นเช่นนี้:
// Establish the weak self reference
__weak typeof(self) weakSelf = self;
[player addPeriodicTimeObserverForInterval:CMTimeMakeWithSeconds(0.1, 100)
queue:nil
usingBlock:^(CMTime time) {
// Establish the strong self reference
__strong typeof(self) strongSelf = weakSelf;
if (strongSelf) {
[strongSelf.timerDisp setText:[NSString stringWithFormat:@"%02d:%02d",min,current]];
} else {
// self doesn't exist
}
}];
ฉันได้อ่านบทความนี้หลายครั้ง นี่เป็นบทความที่ยอดเยี่ยมโดยErica Sadunเกี่ยวกับ
วิธีหลีกเลี่ยงปัญหาเมื่อใช้ Blocks และ NSNotificationCenter
อัพเดตอย่างรวดเร็ว:
ตัวอย่างเช่นในวิธีที่รวดเร็วพร้อมบล็อกความสำเร็จจะเป็นดังนี้:
func doSomeThingWithSuccessBlock(success: () -> ()) {
success()
}
เมื่อเราเรียกวิธีนี้และจำเป็นต้องใช้self
ในบล็อกความสำเร็จ เราจะใช้[weak self]
และguard let
ฟีเจอร์ต่างๆ
doSomeThingWithSuccessBlock { [weak self] () -> () in
guard let strongSelf = self else { return }
strongSelf.gridCollectionView.reloadData()
}
Alamofire
นี้เรียกว่าการเต้นที่แข็งแกร่งที่อ่อนแอจะถูกใช้โดยโครงการที่นิยมเปิดแหล่งที่มา
สำหรับข้อมูลเพิ่มเติมตรวจสอบคู่มือสไตล์ swift
timerDisp
สถานที่ให้บริการในชั้นเรียนหรือไม่?