के साथ एनएससीएच का उपयोग कैसे करें मैं एनएससीएसी में विभिन्न ऑब्जेक्ट्स स्टोर करना चाहता हूं और स्मृति चेतावनी हिट होने पर उन्हें स्वचालित रूप से हटा दिया जाता है। इसलिए मैंने निम्नलिखित NSDiscardableContent कार्यान्वयन लिखा है जिसे मैं एनएससीएच में मानों में डाल दिए गए उदाहरणों को लपेटने के लिए उपयोग करता हूं।एक सामान्य NSDiscardableContent कार्यान्वयन
लेकिन जब मैं "स्मृति चेतावनी अनुकरण" चलाता हूं तो मैं उन्हें कैश से हटा नहीं पाया जाता। क्या मेरे NSDiscardableContent कार्यान्वयन में कुछ गड़बड़ है? या जब स्मृति चेतावनी होती है तो कैश को मूल्यों को छोड़ने के लिए मुझे कुछ और करने की ज़रूरत है?
/** @brief generic implementation of the NSDiscardableContent for storing objects in an NSCache */
@interface GenericDiscardableObject : NSObject<NSDiscardableContent>
@property (nonatomic, retain) id object;
@property (nonatomic) NSUInteger accessCount;
+ (GenericDiscardableObject *)discardableObject:(id)ob;
@end
@implementation GenericDiscardableObject
@synthesize object, accessCount;
+ (GenericDiscardableObject *)discardableObject:(id)ob {
GenericDiscardableObject *discardable = [[GenericDiscardableObject alloc] init];
discardable.object = ob;
discardable.accessCount = 0u;
return [discardable autorelease];
}
- (void)dealloc {
self.object = nil;
[super dealloc];
}
- (BOOL)beginContentAccess {
if (!self.object)
return NO;
self.accessCount = self.accessCount + 1;
return YES;
}
- (void)endContentAccess {
if (self.accessCount)
self.accessCount = self.accessCount - 1;
}
- (void)discardContentIfPossible {
if (!self.accessCount)
self.object = nil;
}
- (BOOL)isContentDiscarded {
return self.object == nil;
}
@end
यह कोई जवाब नहीं है लेकिन यह आपके डेलोक विधि में सेटिंग का उपयोग करने के लिए आम तौर पर खराब अभ्यास है - आपको नहीं पता कि कोई भी केवीओ आदि सुन रहा है या नहीं। बस इसके बजाय '[ऑब्जेक्ट रिलीज]' करें :) – deanWombourne
@deanWombourne ऑब्जेक्ट पर किसी को भी नहीं सुनना चाहिए - (शून्य) dealloc, क्योंकि ऑब्जेक्ट अब बनाए रखा नहीं है। या क्या मैं कुछ गलत समझता हूँ? मैं सिर्फ इसलिए पूछ रहा हूं क्योंकि मैं विलुप्त होने वाले गुणों को भी पसंद करता हूं ... – radiospiel
बस बीकोज़ यह अब तक नहीं टिकता है इसका मतलब यह नहीं है कि कोई भी सुन रहा है;) ऐप्पल इस विषय पर है: http://developer.apple.com/library/ मैक/# प्रलेखन/कोको/अवधारणात्मक/मेमोरीएमजीएमटी/लेख/mmPractical.html और यहां एक और दिलचस्प बातचीत: http://www.cocoabuilder.com/archive/cocoa/242096-avoiding-kvo-in-dealloc.html – deanWombourne