UIImageJPEGRepresentation - PullRequest
       20

UIImageJPEGRepresentation

3 голосов
/ 11 января 2012

У меня проблемы с поиском утечки памяти, которая снова вызывает сбой моего приложения.Кажется, что память, выделенная для JPEGRepresentation, не освобождается.Это еще более любопытно, потому что NSData Object, созданный UIImageJPEGRepresentation, имеет размер всего около 300 КБ (зависит от изображения), но использование памяти на этом этапе увеличивается на 3-5 МБ на изображение.

Этоэто код

QueuedObject* queuedObject = [[QueuedObject alloc] init];
[queuedObject setUrl:url];

QueuedObjectData* jsonQueuedData = [[QueuedObjectData alloc] init];
[jsonQueuedData setData:jsonData];
[jsonQueuedData setFilename:@"message.json"];
[jsonQueuedData setContentType:@"application/json"];
[jsonQueuedData setKeyValue:@"JSONMessage"];
[queuedObject addData:jsonQueuedData];

int i=1;

QueuedObjectData* imageData = [[QueuedObjectData alloc] init];

for(id file in files)
{
    if(file!=nil)
    {
        [imageData setData:UIImageJPEGRepresentation(file, 0.8)];
        [imageData setFilename:[NSString stringWithFormat:@"image%d.jpg",i]];
        [imageData setContentType:@"image/jpeg"];
        [imageData setKeyValue:@"image"];
        [queuedObject addData:imageData];
        i++;
    }
}

[[UploadQueue sharedInstance] addObject:queuedObject];


[jsonQueuedData release];
[jsonData release];
[url release];
[imageData release];
[queuedObject release];

Может быть, у вас есть идея, чтобы помочь мне

С наилучшими пожеланиями Мануэль

1 Ответ

3 голосов
/ 11 января 2012

Теперь вы используете только один imageData объект в вашем цикле.Таким образом, вы всегда создаете представление JPEG без удаления.Попробуйте этот код:

for(id file in files)
{
    if(file!=nil)
    {
        QueuedObjectData* imageData = [[QueuedObjectData alloc] init];
        [imageData setData:UIImageJPEGRepresentation(file, 0.8)];
        [imageData setFilename:[NSString stringWithFormat:@"image%d.jpg",i]];
        [imageData setContentType:@"image/jpeg"];
        [imageData setKeyValue:@"image"];
        [queuedObject addData:imageData];
        [imageData release];
        i++;
    }
}

Здесь вы создаете объект, используете его, а затем удаляете.

...