CSURLCache
ऑफ़लाइन ब्राउज़िंग के लिए संसाधनों को कैश करने के लिए डिज़ाइन किया गया है, NSURLCache
केवल डेटा इन-मेमोरी संग्रहीत करता है।NSURLCache ऑटोरेलेज्ड ऑब्जेक्ट्स के साथ क्रैश हो जाता है, लेकिन लीक अन्यथा
यदि cachedResponse
एप्लिकेशन क्रैश को वापस करने से पहले स्वत: बंद कर दिया गया है, यदि नहीं, तो वस्तुएं बस लीक हो जाती हैं।
इस पर बहने वाले किसी भी प्रकाश की बहुत सराहना की जाएगी।
कृपया ध्यान दें stringByEncodingURLEntities
NSString
पर एक श्रेणी विधि है।
@interface CSURLCache : NSURLCache {} @end
@implementation CSURLCache
- (NSCachedURLResponse *)cachedResponseForRequest:(NSURLRequest *)request
{
NSString *path = [[NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject] stringByAppendingPathComponent:[[[request URL] absoluteString] stringByEncodingURLEntities]];
if ([[NSFileManager defaultManager] fileExistsAtPath:path])
{
NSData *data = [[NSData alloc] initWithContentsOfFile:path];
NSURLResponse *response = [[NSURLResponse alloc] initWithURL:[request URL]
MIMEType:nil
expectedContentLength:[data length]
textEncodingName:nil];
NSCachedURLResponse *cachedResponse = [[NSCachedURLResponse alloc] initWithResponse:response
data:data];
[response release];
[data release];
return cachedResponse;
}
return nil;
}
@end
अद्यतन: एप्पल के लिए एक रडार जमा करने के बाद ऐसा लगता है कि यह एक ज्ञात समस्या (रडार # 7,640,470) है।
क्या आप सुनिश्चित हैं कि वे लीक हो गए हैं यदि वे स्वत: नहीं हैं? और क्या आप सुनिश्चित हैं कि आपका प्रोग्राम क्रैश हो क्योंकि आप उन्हें रिलीज़ करने का प्रयास करते हैं? मेमोरी प्रबंधन नियम स्पष्ट रूप से बताते हैं कि आप उस वस्तु को जारी करने के लिए जिम्मेदार होंगे। – zneak
हां, अगर वे स्वत: नहीं हैं तो वे निश्चित रूप से लीक हो रहे हैं। कार्यक्रम दुर्घटनाग्रस्त हो जाता है क्योंकि एक निरंतर संदेश को एक हटाए गए ऑब्जेक्ट –