0

我有一个应用程序,我在其中显示大约 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"]]];  `
4

3 回答 3

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);
于 2012-08-03T12:31:18.430 回答
0

您正在尝试将 50 张图像加载到内存中并且不希望遇到麻烦?它们的文件大小有多大?

最好只在需要/显示时加载图像。尝试将实际图像与图像信息(名称、大小等)分开并将它们加载到您的系统中,也许显示一些占位符。然后,当您显示特定图像时,将实际图像加载到您的内存中并显示它。

于 2012-08-03T11:42:42.347 回答
0

你不能一次加载那么多图片。内存不够。

  1. 仅加载您正在显示的内容
  2. 不要让你的图片比你需要的大(如果你需要某种预览,请使用小缩略图)
  3. 不要使用 imageNamed: ,它会缓存图像并吃掉内存。使用 imageWithFile: 代替。
于 2012-08-03T12:53:50.277 回答