Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何在没有内存警告的情况下正确调整图像大小 我在文档目录中没有存储图像(对于EX:考虑60 +)。我必须在表视图中显示所有这些图像。这些图像很大,因此我正在根据此链接调整图像的大小_Ios_Objective C_Memory Management_Memory Leaks - Fatal编程技术网

Ios 如何在没有内存警告的情况下正确调整图像大小 我在文档目录中没有存储图像(对于EX:考虑60 +)。我必须在表视图中显示所有这些图像。这些图像很大,因此我正在根据此链接调整图像的大小

Ios 如何在没有内存警告的情况下正确调整图像大小 我在文档目录中没有存储图像(对于EX:考虑60 +)。我必须在表视图中显示所有这些图像。这些图像很大,因此我正在根据此链接调整图像的大小,ios,objective-c,memory-management,memory-leaks,Ios,Objective C,Memory Management,Memory Leaks,我在cellforrow中编写的代码如下: @autoreleasepool { dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0); dispatch_async(queue, ^{ NSString *folderPath = [self getEduCurrentDira

我在cellforrow中编写的代码如下:

@autoreleasepool {

            dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0);
            dispatch_async(queue, ^{


                    NSString *folderPath = [self getEduCurrentDiractoryPath];
                    NSString *filePath = [folderPath stringByAppendingPathComponent:[message.internalUrl.absoluteString lastPathComponent]];
                    NSLog(@"currentDirectoryPath %@",filePath);

                    dispatch_sync(dispatch_get_main_queue(), ^{

                        cell.message.thumbnail = [[UIImage imageWithContentsOfFile:filePath] resizedImage:CGSizeMake(210, 170) interpolationQuality:kCGInterpolationLow];

                    });
            });
        }
现在,当我检查仪器以查看分配并尝试查找内存警告原因时,它显示以下结果:

在这里您可以看到resizeimage:interpolationQuality方法显示168MB的分配,我的项目ARC在其中,我也将该代码放在@autoreleasepool中。。但它不会释放分配的内存…


有没有人能帮我正确地重新缩放图像以避免出现记忆警告,或者有人能指出我在哪里出错。。任何帮助都将不胜感激。。!!!谢谢..

试试这个。这里imgProf是我的图像名

imgProf = [self imageWithImage:imgProf scaledToSize:CGSizeMake(400, 400)];
这是我创建的调整图像大小的函数

- (UIImage*)imageWithImage:(UIImage*)image
              scaledToSize:(CGSize)newSize;
{
    UIGraphicsBeginImageContext( newSize );
    [image drawInRect:CGRectMake(0,0,newSize.width,newSize.height)];
    UIImage* newImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

    return newImage;
}

不要用cellforrow方法对其进行编码,在重新加载数据之前,您应该完成缩略图。

使用异步块读取图像路径没有任何意义。It操作占用一般执行时间的000001%。代码中最繁杂、最耗时的操作是裁剪操作。因此,我建议您将:UIImage*cropedimage=[[UIImage-imageWithContentsOfFile:filePath]resizedImage:CGSizeMake(210170)interpolationQuality:kCGInterpolationLow];在异步块中,获取图像:cell.message.thumbnail=crappedimage;在主线程中。并尝试将@autoreleasepool替换为异步块。并通过仪器分配检查性能。如果可以的话,试着移除它,同时检查仪器之间的差异。谢谢..我也尝试过这个选项…使用建议的代码..情况变得更糟…在这种情况下,问题可能在你的裁剪方法中有所涉及。也许您没有发布一些CoreFoundation对象。尝试在几个没有异步块的映像上进行测试,看看问题是否仍然存在(内存是否释放)