由于uiimageview,应用程序崩溃

时间:2012-08-03 11:33:47

标签: iphone

我有应用程序,其中我显示约50张图像,当我达到第30张图像时,我的应用程序因内存问题而崩溃。我已经尝试了所有我知道的方法,但仍然没有解决问题。所以请帮助我。

NSLog(@"%d",nn);
nn ++;
NSLog(@"%d",nn);
NSMutableArray* arr2 = [[NSMutableArray alloc]init];
arr2 = [Database executeQuery:@"select * from cartoon"];
if (nn == [arr2 count]) 
{
    nn = 0;
}
NSMutableDictionary*  dict1 = [arr2 objectAtIndex:nn];
NSLog(@"%@",dict1);              
NSString * both_name = [NSString string];
both_name = [both_name stringByAppendingString:[dict1 objectForKey:@"mainpk"]];
both_name = [both_name stringByAppendingFormat:@".  "];
both_name = [both_name stringByAppendingString:[dict1 objectForKey:@"name"]];
NSLog(@"both %@",both_name);
label1.text = both_name;
imgv.image = [UIImage imageNamed:[NSString stringWithFormat:@"%@.jpg",[dict1 objectForKey:@"name"]]];  `

3 个答案:

答案 0 :(得分:0)

您是否尝试将50张图像加载到内存中并且不会出现问题? 它们的大小有多大?

最好只在需要/显示时加载图像。尝试从图像信息(名称,大小,其他)中分割实际图像并将其加载到您的系统中,可能会显示一些占位符。 然后,当您显示特定图像时,将实际图像加载到您的记忆中并显示它。

答案 1 :(得分:0)

代码 [dict1 objectForKey:@“mainpk”] 未返回字符串。

您的代码中的错误:

在下面一行中,您将使用无键创建词典。

NSMutableDictionary*  dict1 = [arr2 objectAtIndex:nn];

然后通过无效密钥访问字符串。

[dict1 objectForKey:@"mainpk"]];

将无效值附加到字符串

[both_name stringByAppendingString:[dict1 objectForKey:@"mainpk"]];

这会崩溃:)

这样可行:

NSMutableDictionary*  dict1 =  [[ NSMutableDictionary alloc ] initWithCapacity: 0];

[dict1 setObject: @"test" forKey: @"mainpk"];
[dict1 setObject: @"test1" forKey: @"name"];    

NSString * both_name = [NSString string];
both_name = [both_name stringByAppendingString:[dict1 objectForKey:@"mainpk"]];
both_name = [both_name stringByAppendingFormat:@".  "];
both_name = [both_name stringByAppendingString:[dict1 objectForKey:@"name"]];
NSLog(@"both %@",both_name);

答案 2 :(得分:0)

您无法一次加载那么多图片。内存不足。

  1. 仅加载您正在展示的内容
  2. 不要让你的图像比你需要的更大(如果你需要某种预览,请使用小缩略图)
  3. 不要使用imageNamed :,它会缓存图像并吃掉ram。使用imageWithFile:代替。