0

我有 NSURLConnection 从 URL 下载 PNG 文件。这是代码:

-(void)connection:(NSURLConnection *)theConnection didReceiveData:(NSData *)incrementalData {
    if (data==nil) { data = [[NSMutableData alloc] initWithCapacity:2048]; }
    [data appendData:incrementalData];
}

-(void)connectionDidFinishLoading:(NSURLConnection*)theConnection {
    [self saveItLocal];
    connection = nil;
    data = nil;
}

-(void)saveItLocal {
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES);
    NSString *docs = [paths objectAtIndex:0];
    NSString* path =  [docs stringByAppendingFormat:[NSString stringWithFormat:@"/%@.png",self.downloadType]];
    NSData* imageData = [NSData dataWithData:UIImagePNGRepresentation([UIImage imageWithData:data])];
    NSError *writeError = nil;
    [imageData writeToFile:path options:NSDataWritingAtomic error:&writeError];

    if(writeError!=nil) {
        NSLog(@"%@: Error saving image: %@", [self class], [writeError localizedDescription]);
    }

    [[NSNotificationCenter defaultCenter] postNotificationName:@"readyWithGraphics" object:self];

    imageData = nil;

}

在此处输入图像描述

为什么这个对象仍然存在并存在于记忆中?

4

1 回答 1

1

您不需要显式地将 NSURLConnection 对象设为 nil,因为它会在不再需要时由框架自动释放。

消除

connection=nil; 

编辑:抱歉,我没有看到您使用 ivar 来保持连接。这不是通常的做法。你为什么要把它和你的对象一起保留?只需创建它并启动它,正如我上面所说,它会在时间到时自动发布,但绝对不要将其设为 ivar,除非你有很好的理由。

于 2012-11-19T12:44:48.977 回答