Состояние гонки (?) При записи временного файла iPhone - PullRequest
0 голосов
/ 20 июля 2010

Я создаю некоторые временные файлы в симуляторе iPad. Чтобы проверить создание файла, я создаю файл и затем читаю его обратно. Вот некоторый код, чтобы показать это:

-(NSString *) writeToTempFile:(UIImage*) image{
NSString *path = [self createTemporaryFile];
NSLog(@"path: %@", path);
NSData *data = UIImageJPEGRepresentation(image, 1);
[data writeToFile:path atomically:YES]; 
free(data);
return path;
}

-(UIImage *) readTempFile:(NSString *) path{
NSData *data = [[NSData alloc] initWithContentsOfFile:path];
UIImage *image = [[UIImage alloc] initWithData:data];
return image;
}

Я вызываю эти методы один за другим, пока последняя функция не записала UIImage в фотоальбом.

UIImageWriteToSavedPhotosAlbum(image2, self, nil, nil);

Проблема в том, что всегда вызывает сбой моего приложения в третий раз, когда оно выполняется. Первый и второй раз он успешно все это делает и сохраняет в альбом. В третий раз он падает на дом. Есть идеи?

1 Ответ

6 голосов
/ 20 июля 2010
NSData *data = UIImageJPEGRepresentation(image, 1);
[data writeToFile:path atomically:YES]; 
free(data);

NSData, возвращаемое из UIImageJPEGRepresentation, равно -autorelease d. Нет необходимости free(). И это неправильно до free() любых объектов Objective C - вместо этого отправьте сообщение -release.

Пожалуйста, прочитайте Руководство по программированию управления памятью .

...