ในความคิดของฉัน - งานนี้คล้ายกับกลไกการเก็บเงิน คุณไม่สามารถแน่ใจได้ว่าในขณะนี้คุณมีผู้สังเกตการณ์ แม้ว่าคุณจะตรวจสอบ: self.observationInfo - คุณไม่สามารถแน่ใจได้ว่าคุณจะมี / ไม่มีผู้สังเกตการณ์ในอนาคต
เช่นเดียวกับretainCount บางทีobservationInfoวิธีไม่ว่าชนิดของไร้ประโยชน์ที่ แต่ฉันเท่านั้นที่ใช้ในวัตถุประสงค์การแก้ปัญหา
ดังนั้นคุณต้องทำเช่นนี้ในการจัดการหน่วยความจำ หากคุณเพิ่มผู้สังเกตการณ์ให้ลบออกเมื่อไม่ต้องการ ชอบใช้วิธีการ viewWillAppear / viewWillDisappear ฯลฯ เช่น:
-(void) viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
[self addObserver:nil forKeyPath:@"" options:NSKeyValueObservingOptionNew context:nil];
}
-(void) viewWillDisappear:(BOOL)animated
{
[super viewWillDisappear:animated];
[self removeObserver:nil forKeyPath:@""];
}
และคุณต้องมีการตรวจสอบเฉพาะ - ใช้คลาสของคุณเองที่จัดการอาร์เรย์ของผู้สังเกตการณ์และใช้สำหรับการตรวจสอบ
addObserver:
ในviewWillAppear:
และตามลําดับremoveObserver:
ในviewWillDisappear:
การโทรที่ถูกจับคู่ได้อย่างถูกต้อง ฉันต้องทำการแก้ไขอย่างรวดเร็วดังนั้นฉันจะใช้โซลูชันลองจับและแสดงความคิดเห็นเพื่อตรวจสอบสาเหตุเพิ่มเติม