Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/99.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 调整图像大小并保存在文档崩溃中_Ios_Ipad_Uiimage - Fatal编程技术网

Ios 调整图像大小并保存在文档崩溃中

Ios 调整图像大小并保存在文档崩溃中,ios,ipad,uiimage,Ios,Ipad,Uiimage,在我的应用程序中,我需要通过代码创建将要使用的图像。我下载了一个全屏版本的图片,然后我创建了我需要的所有剪辑。这种方法减少了用户从服务器下载的MB。 下载的图像约为300。iPad非视网膜屏幕尺寸为1024x768,iPad视网膜屏幕尺寸为2048x1536 这是我用来调整图像大小以创建所需剪辑的算法。为每个图像创建另一个简化版本,然后将保存在文档文件夹中 我使用ARC和GCD CGFloat screenScale = [UIScreen mainScreen].scale;    

在我的应用程序中,我需要通过代码创建将要使用的图像。我下载了一个全屏版本的图片,然后我创建了我需要的所有剪辑。这种方法减少了用户从服务器下载的MB。 下载的图像约为300。iPad非视网膜屏幕尺寸为1024x768,iPad视网膜屏幕尺寸为2048x1536

这是我用来调整图像大小以创建所需剪辑的算法。为每个图像创建另一个简化版本,然后将保存在文档文件夹中

我使用ARC和GCD

    CGFloat screenScale = [UIScreen mainScreen].scale;
    
    NSString * imagePath = [[NSBundle mainBundle]pathForResource:imageName ofType:nil];
    UIImage * image = [UIImage imageWithContentsOfFile:imagePath];
    CGSize newImageSize = [image resizeImageSettingWidth:(380.0f * screenScale)];
    
    UIGraphicsBeginImageContext(newImageSize);
    [image drawInRect:CGRectMake(0,0,newImageSize.width,newImageSize.height)];
    UIImage* newImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    
    NSData *jpegData = UIImageJPEGRepresentation(newImage, 0.9f);
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsPath = [paths objectAtIndex:0];
    
    NSString * newImageName;
    if ([[UIScreen mainScreen] respondsToSelector:@selector(displayLinkWithTarget:selector:)] &&
        ([UIScreen mainScreen].scale == 2.0)) {
        
        newImageName = [NSString stringWithFormat:@"%@-article@2x.jpg", [imageName stringByDeletingPathExtension]];
        
    }
    else {
        
        newImageName = [NSString stringWithFormat:@"%@-article.jpg", [imageName stringByDeletingPathExtension]];
    }
    
    NSString *filePath = [documentsPath stringByAppendingPathComponent:newImageName]; 
    [jpegData writeToFile:filePath atomically:YES];
在未知次数的调整大小后,应用程序可能因内存警告而崩溃。崩溃只发生在第四代iPad上,而在iPad2上,这一切都很完美。
可能问题在于autorelease对象释放延迟,这会产生内存累积?

如果使用仪器,您可以很容易地知道是否是内存崩溃。。。在这种情况下,尝试隔离问题;在一次调整/保存和下一次之间留出更多时间,等等。。。否则:它会在哪一行崩溃?如果我在一次调整/保存和下一次调整/保存之间插入延迟,应用程序会崩溃!如何插入延迟?