Распределение Iphone с NSData - PullRequest
       26

Распределение Iphone с NSData

1 голос
/ 09 октября 2010

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

-(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, и ни один из них не помогает.

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

Ответы [ 3 ]

0 голосов
/ 09 октября 2010

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

0 голосов
/ 20 октября 2010

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

0 голосов
/ 09 октября 2010

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

...