我很难找到内存泄漏,然后再次导致我的应用程序崩溃。似乎没有释放为 JPEGRepresentation 分配的内存。这更令人好奇,因为 UIImageJPEGRepresentation 创建的 NSData 对象只有大约 300 kb 大(取决于图像),但是在此阶段每个图像的内存使用量增加了大约 3-5 MB。

这是代码

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];

也许你有什么想法可以帮助我

此致
曼努埃尔

最佳答案

现在您在循环中只使用了一个 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++;
    }
}

在这里您创建对象,使用它然后删除。

关于objective-c - UIImageJPEG 表示,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8821536/

10-12 14:32
查看更多