我很难找到内存泄漏,然后再次导致我的应用程序崩溃。似乎没有释放为 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/