2010-10-08 3 views
1

У меня есть метод, который загружает много изображений из Интернета, а затем сохраняет их на устройство. Вот код:Распределение Iphone с NSData

-(IBAction) updateImages { 
    for (x=0; x<[imagesToUpdate count]; x=x+1) { 
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc]init]; 
    NSMutableDictionary *tempDic = [dic objectForKey:[imagesToUpdate objectAtIndex:x]]; 
    BOOL newDictionary = [self downloadChartForDictionary:tempDic]; 

    [pool drain]; 
    } 

} 


-(BOOL) downloadChartForDictionary:(NSMutableDictionary *)dictionary { 

    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc]init]; 
    NSMutableDictionary *updatedDictionary = [NSMutableDictionary dictionaryWithDictionary:dictionary]; 
    NSString *downloadString = [NSString stringWithFormat:@"http://www.photo.com/%@_0001.jpg",[updatedDictionary objectForKey:@"PDFName"]]; 
    [updatedDictionary setObject:serverAIRAC forKey:@"airac"]; 
    NSDate *date = [NSDate date]; 
    NSDateFormatter *formatter = [[NSDateFormatter alloc]init]; 
    formatter.dateFormat = @"MM-dd-y"; 
    NSString *dateString = [formatter stringFromDate:date]; 
    [updatedDictionary setObject:dateString forKey:@"date"]; 
    [formatter release]; 


    NSURL *url = [NSURL URLWithString:downloadString]; 
    NSData *data = [NSData dataWithContentsOfURL:url]; 


    NSArray* paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, 
    NSUserDomainMask, YES); 
    NSString *docsPath = [paths objectAtIndex:0]; 


    NSString *savePath = [NSString stringWithFormat:@"%@/%@^%@_%@.jpg",docsPath,serverAIRAC,[updatedDictionary objectForKey:@"airport"],[updatedDictionary objectForKey:@"PDFName"]]; 

    BOOL downloaded = [data writeToFile:savePath atomically:YES]; 

    [pool drain]; 

    return YES; 

} 

Моя проблема заключается в том, что, когда это работает, объект NSData, данные, выделяется, но никогда не выпускали, даже когда метод updateImages закончен. В инструментах каждое загруженное изображение остается выделенным. Общее распределение продолжает расти по мере загрузки каждого изображения и, в конечном итоге, происходит сбой в памяти. Однако инструменты не сообщают об утечке, связанной с этим объектом.

Я попытался: [[NSData alloc] initWithContentsOfURL: url], а затем освободить его, но это не поможет.

Я попытался поставить пул авторесурсов только в методе updateImages и только в методе downloadChartForDictionary и ни один из них не помогает.

Я застрял на этом весь день, так что любая помощь очень ценится

+0

Что сбивает с толку, у меня есть другой контроллер, который делает почти то же самое, и он отлично работает. – Brodie

ответ

0

Пробовали ли вы [[[NSData alloc]initWithContentsOfURL:url] autorelease]? Это превратит объект NSData в текущий пул автозапуска. Простое создание alloc/init будет по-прежнему требовать вашего явного управления.

+0

Нет, но я только что сделал и не радость, спасибо за предложение. – Brodie

0

Попробуйте использовать dataWithContentsOfURL:options:error: с различными параметрами для чтения. Я бы начал с NSDataReadingUncached, потому что похоже, что ваши данные кэшируются, когда вы этого не хотите.

+0

нет радости, но хорошая идея – Brodie

0

Это было фактически не проблема ... По какой-то причине инструменты сообщали о распределении, но когда я фактически запускал приложение, он никогда не разбивался.