swift - कैश जो मांग द्वारा अप्रयुक्त वस्तुओं को शुद्ध कर सकता है



caching automatic-ref-counting (1)

आपको ऑब्जेक्ट के बनाए रखने की गिनती के साथ गड़बड़ करने की आवश्यकता नहीं है आपका कैश सिर्फ एक मजबूत संदर्भ पकड़ सकता है यह गारंटी देता है कि बनाए रखने की गणना हमेशा कम से कम एक है जब आपको मेमोरी चेतावनी मिलती है तो आप कैश में प्रत्येक पॉइंटर के माध्यम से सिर्फ लूप ले जाते हैं और इसे शून्य में सेट करते हैं। किसी और का मानना ​​नहीं है कि एक मजबूत संदर्भ है, यह शून्य को संदर्भ संख्या को घटाता है और वस्तु तुरंत नष्ट हो जाती है और स्मृति से बाहर जाती है यदि आप वाकई वास्तव में वस्तु को स्मृति से बाहर जाने के लिए चाहते हैं, जब कैश शुद्ध करता है, तो सुनिश्चित करें कि कैश के पास आइटम के संदर्भ में एक मजबूत संदर्भ है और यह कि हर कोई कमजोर संदर्भ लेता है मेरे पास एक आलसी लोडेड सरणी है ViewControllers जो कुछ समान करता है:

    fileprivate var controllers = [UIViewController?](repeating: nil, count:  DashboardInfo.Category.allValues.count)

    override func didReceiveMemoryWarning() {
        //Release every off screen controller
        for index in 0 ..< controllers.count {
            if controllers[index] != currentController {
                controllers[index]?.removeFromParentViewController()
                controllers[index]?.view.removeFromSuperview()
                controllers[index] = nil
            }
        }
    }

मुझे एक कैश बनाने की ज़रूरत है, जो कुछ ऑब्जेक्ट्स को बचा सकता है, लेकिन फिर, जब मुझे मेमोरी चेतावनी होती है या बस उपयोगकर्ता यह चाहता है, तो मैं उन सभी उदाहरणों को शुद्ध करना चाहूंगा, जो कि इस समय कैश में ही उपयोग किए जाते हैं।

दूसरे शब्दों में: मुझे एआरसी गिनती == 1 के साथ ऑब्जेक्ट को हटाना पड़ेगा। समस्या यह है कि इस प्रोजेक्ट के मेरे गॉगलिंग पर आधारित, शुद्ध स्विफ्ट में किसी ऑब्जेक्ट को बनाए रखने के लिए संभव नहीं है।

मेरे अनुभव से मुझे लगता है कि यह स्विफ्ट में डिफ़ॉल्ट रूप से संभव नहीं है। उद्देश्य-सी में मैं प्रॉक्सी ऑब्जेक्ट का उपयोग कर रहा था, जो कि कैश से लौटा था, इस तरह के ओवरराइड किया गया था:

    // Forward class checks for assertions.
-(BOOL)isKindOfClass:(Class)aClass {return [_target isKindOfClass:aClass];}

- (id)forwardingTargetForSelector:(SEL)aSelector
{
    return(_target);
}

लेकिन निश्चित रूप से स्विफ्ट विचारधारा के लिए लागू नहीं है

एक ने सोचा कि मेरे पास कमजोरों के सरणी पर मेरी कैश का आधार होना है, लेकिन इस तरह अप्रयुक्त ऑब्जेक्ट का उपयोग तब किया जाएगा जब वे अप्रयुक्त हो जाएंगे और यह मेरी आवश्यकताओं को पूरा नहीं करेगा

क्या कोई मुझे कुछ स्विफ्ट संभावनाओं के लिए मार्गदर्शन कर सकता है, कि मुझे इस बारे में पता नहीं है, ऐसी चीज़ प्राप्त करने के लिए?





swift3