CSURLCache
dient zum Zwischenspeichern von Ressourcen für das Offline-Browsing, da NSURLCache
nur Daten in Arbeitsspeicher speichert.NSURLCache stürzt mit autoreleased Objekten ab, aber Lecks sonst
Wenn cachedResponse
wird automatisch freigegeben, bevor die Anwendung abstürzt, wenn nicht, die Objekte sind einfach undicht.
Jedes Licht, das sich darauf werfen könnte, würde sehr geschätzt werden.
Bitte beachten Sie stringByEncodingURLEntities
ist eine Kategorie-Methode auf 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
UPDATE: Nachdem ein Radar an Apple einreichen scheint es, dass dies ein bekanntes Problem ist (Radar # 7640470).
Sind Sie sicher, dass sie durchgesickert sind, wenn sie nicht automatisch freigegeben wurden? Und bist du sicher, dass dein Programm abstürzt, weil du versuchst, sie zu veröffentlichen? Speicherverwaltungsregeln geben eindeutig an, dass Sie derjenige sein würden, der für die Freigabe dieses Objekts verantwortlich ist. – zneak
Ja, sie sind definitiv undicht, wenn nicht automatisch freigegeben. Das Programm stürzt ab, weil eine Retain-Nachricht an ein nicht zugeordnetes Objekt gesendet wird –