NSURLResponse의 보관 및 보관 해제로 인해 누수가 발생하는 누수가 발견되어 이유를 파악할 수 없습니다.NSURLResponse가 아카이브 될 때 메모리가 누출되는 이유는 무엇입니까?
- (void)doStuffWithResponse:(NSURLResponse *)response {
NSMutableData *saveData = [[NSMutableData alloc] init];
NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:saveData];
[archiver encodeObject:response forKey:@"response"];
// Encode other objects
[archiver finishDecoding];
[archiver release];
// Write data to disk
// release, clean up objects
}
- (void)retrieveResponseFromPath:(NSString *)path {
NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:[NSData dataWithContentsOfFile:path]];
NSURLResponse *response = [unarchiver decodeObjectForKey:@"response"];
// The above line leaks!!
// decode other objects
// clean up memory and do other operations
}
NSURLResponse를 보관 취소 할 때 악기가 누출을보고합니다. 내가 그걸 언급하고 그것을 사용하지 않는다면 누출은 없다. 흥미로운 점은 대신 NSURL 응답의 일부를 저장 했으므로 누출이 없음을 의미합니다.
// Encode:
[archiver encodeObject:[response URL] forKey:@"URL"];
[archiver encodeObject:[response MIMEType] forKey:@"MIMEType"];
[archiver encodeObject:[NSNumber numberWithLongLong:[response expectedContentLength]] forKey:@"expectedContentLength"];
[archiver encodeObject:[response textEncodingName] forKey:@"textEncodingName"];
// Decode:
NSURL *url = [unarchiver decodeObjectForKey:@"URL"];
NSString *mimeType = [unarchiver decodeObjectForIKey:@"MIMEType"];
NSNumber *expectedContentLength = [unarchiver decodeObjectForKey:@"expectedContentLength"];
NSString *textEncodingName = [unarchiver decodeObjectForKey:@"textEncodingName"];
NSURLResponse* response = [[NSHTTPURLResponse alloc] initWithURL:url MIMEType:mimeType expectedContentLength:[expectedContentLength longLongValue] textEncodingName:textEncodingName];
누구인지 알 수 있습니다. NSURLResponse를 보관하는 버그가 있습니까? 아니면 제가 잘못하고 있습니까?
코드는 실제로 // 릴리스 아래 개체 섹션을 정리합니다. 누출을 일으키는 정확한 위치에 더 많은 초점을 맞추기 위해 제공하지는 않았지만 더 혼동을 일으키고 있다고 생각합니다. 앞서 말했듯이 특정 코드 행을 주석 처리하면 계측기에서 누출이 없음을 알립니다. 정적 분석기는 간단한 누수에 대해 불평하지 않습니다. 나는 내 문제가 여전히있는 모든 대상을 풀어 놓고있다. –