0

URLからPNGファイルをダウンロードするNSURLConnectionがあります。コードは次のとおりです。

-(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 に答える