मेरे पास एक दृश्य है (हम इस दृश्य को कॉल करेंगे ए) जिसमें weak
संपत्ति है इसके पर्यवेक्षण (बी देखें)। एक केवीओ का पर्यवेक्षण देखें, बी देखें। चूंकि ए को देखने के संदर्भ में बी एक कमजोर संपत्ति है (एक बनाए रखने के चक्र को रोकने के लिए), मैं पर्यवेक्षक को कैसे हटा सकता हूं (ए देखरेख बी)? इससे पहले कि मुझे इसे हटाने का मौका मिलने से पहले बी को देखने के लिए ए संदर्भ देखें।आप कमजोर संपत्ति से केवीओ को कैसे हटाते हैं?
एक बी बाद भी जीवित रहता के बाद से दृश्य नियंत्रक ए के लिए एक मजबूत संदर्भ है यहाँ लीक लॉग संदेश है:
An instance 0x9ac5200 of class UITableView was deallocated while key value observers were still registered with it. Observation info was leaked, and may even become mistakenly attached to some other object. Set a breakpoint on NSKVODeallocateBreak to stop here in the debugger. Here's the current observation info:
<NSKeyValueObservationInfo 0x8660360> (
<NSKeyValueObservance 0x8660320: Observer: 0x8660020, Key path: contentOffset, Options: <New: YES, Old: NO, Prior: NO> Context: 0x8660020, Property: 0x864ac80>
)
बी एक UITableView है। NSKVODeallocateBreak
पर ब्रेकपॉइंट सेट करना बेकार परिणाम उत्पन्न करता है।
ए removeFromSuperview
में, मैं पर्यवेक्षक को हटाने का प्रयास करता हूं लेकिन बी का संदर्भ बी 0 पहले से ही nil
है।
unsafe_unretained
पर स्विच करना और दृश्य नियंत्रक के में समस्याएं हल करने के लिए मैन्युअल रूप से या [A removeFromSuperview]
पर कॉल करना समस्या हल करती है। मैं जानना चाहता हूं कि weak
संपत्ति का उपयोग करके इसे कैसे हल किया जाए।
यहाँ प्रासंगिक कोड है: https://gist.github.com/2822776
मेरा बुरा ... +1 किसी भी तरह। – CodaFi