iOS打开的文件过多

我是新的ios编程,当我的应用程序正在运行,我正在采取这些错误。 我在我的应用程序加载950+图像,我正在使用ARC。

ImageIO:CGImageRead_mapData'open'failed'/ Users / apple / Library / Application Support / iPhone Simulator / 6.1 / Applications / 16551664-4694-4742-85DC-2C3C0ADC5289 / demo.app / menu-24-20.png'error = 24 (太多打开的文件)

ImageIO:CGImageRead_mapData'open'failed'/ Users / apple / Library / Application Support / iPhone Simulator / 6.1 / Applications / 16551664-4694-4742-85DC-2C3C0ADC5289 / demo.app / menu-24-20.png'error = 24 (太多打开的文件)

ImageIO:CGImageRead_mapData'open'failed'/ Users / apple / Library / Application Support / iPhone Simulator / 6.1 / Applications / 16551664-4694-4742-85DC-2C3C0ADC5289 / demo.app / circle_green.png'error = 24(太多打开文件)

ImageIO:CGImageRead_mapData'open'failed'/ Users / apple / Library / Application Support / iPhone Simulator / 6.1 / Applications / 16551664-4694-4742-85DC-2C3C0ADC5289 / demo.app / circle_green.png'error = 24(太多打开文件)

ImageIO:CGImageRead_mapData'open'failed'/ Users / apple / Library / Application Support / iPhone Simulator / 6.1 / Applications / 16551664-4694-4742-85DC-2C3C0ADC5289 / demo.app / shopping_cart_1-512.png'error = 24(Too许多打开的文件)

ImageIO:CGImageRead_mapData'open'failed'/ Users / apple / Library / Application Support / iPhone Simulator / 6.1 / Applications / 16551664-4694-4742-85DC-2C3C0ADC5289 / demo.app / shopping_cart_1-512.png'error = 24(Too许多打开的文件)

这个代码块是我的应用程序的一部分。

while(sqlite3_step(compiledStatement) == SQLITE_ROW) { int UrunId = sqlite3_column_int(compiledStatement,0); //NSString *urunNo= [NSString stringWithFormat:@"%i",UrunId]; UrunAdi = [NSString stringWithUTF8String:(char*)sqlite3_column_text(compiledStatement, 1)]; NSString *imageName= [NSString stringWithUTF8String:(char*)sqlite3_column_text(compiledStatement, 2)]; UIImageView *background = [[UIImageView alloc]initWithFrame:CGRectMake(column*197+30, row*350, 175, 280)]; NSString *filePathBackGround = [[NSBundle mainBundle] pathForResource:@"BackImage" ofType:@"png"]; NSData *myData = [NSData dataWithContentsOfFile:filePathBackGround]; UIImage *blackBackGround = [UIImage imageWithData:myData]; [background setImage:blackBackGround]; [scrollView addSubview:background]; NSString *filePathSepeteEkleButton = [[NSBundle mainBundle] pathForResource:@"sepeteEkleButtonImage" ofType:@"png"]; NSData *myDataButton = [NSData dataWithContentsOfFile:filePathSepeteEkleButton]; UIImage *sepeteEkleButtonImage = [UIImage imageWithData:myDataButton]; UIButton * button = [UIButton buttonWithType:UIButtonTypeCustom]; [button setFrame:CGRectMake(column*197+38 , row*350+8, 159, 45)]; [button setImage:sepeteEkleButtonImage forState:UIControlStateNormal]; [button addTarget:self action:@selector(addToChart:) forControlEvents:UIControlEventTouchUpInside]; button.tag = UrunId; UILabel *buttonLabel=[[UILabel alloc]initWithFrame:CGRectMake(column*197+43,row*350+20,200,20)]; buttonLabel.textColor = [UIColor whiteColor]; buttonLabel.backgroundColor=[UIColor clearColor]; buttonLabel.text=UrunAdi; [scrollView addSubview:button]; [scrollView addSubview:buttonLabel]; NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *documentsPath = [paths objectAtIndex:0]; //Get the docs directory NSString *filePath = [documentsPath stringByAppendingPathComponent:imageName]; NSData *pngData = [NSData dataWithContentsOfFile:filePath]; if (pngData == nil) { NSString *filePathResimYok= [[NSBundle mainBundle] pathForResource:@"resimYok" ofType:@"jpeg"]; NSData *myDataResimYok= [NSData dataWithContentsOfFile:filePathResimYok]; image2 = [UIImage imageWithData:myDataResimYok];//horoda }else{ image2 = [UIImage imageWithData:pngData]; } image2=[image2 imageByScalingAndCroppingForSize:CGSizeMake(175, 210)]; //UIImage *urunDetayImage = [UIImage imageNamed:image2]; UIButton * urunDetayButton = [UIButton buttonWithType:UIButtonTypeCustom]; [urunDetayButton setFrame:CGRectMake(column*197+38 , row*350+58, 159, 170)]; [urunDetayButton setImage:image2 forState:UIControlStateNormal]; [urunDetayButton addTarget:self action:@selector(buttonClicked:) forControlEvents:UIControlEventTouchUpInside]; urunDetayButton.tag = UrunId; [scrollView addSubview:urunDetayButton]; UILabel *label=[[UILabel alloc]initWithFrame:CGRectMake(column*197+38,row*350+245,200,20)]; label.textColor = [UIColor whiteColor]; label.backgroundColor=[UIColor clearColor]; label.text=UrunAdi; [scrollView addSubview:label]; 

我正在修理3天,请帮助我。 谢谢。

据我可以看到你的代码看起来很好,并运行在模拟器(大量的内存)这应该是工作。 几点build议:

1)使用dataWithContentsOfFile:options:error:而不是dataWithContentsOfFile: :,使用NSDataReadingUncached选项(以减less系统内存压力),并testing返回值 – 如果没有logging错误并更新你的问题。

2)你总是可以将数据映像转储到一个NSCache对象中,如果系统需要内存,它将释放caching项目,你将不得不从文件系统重新读取图像。 即使只是一次拉几张图像,也可以使用这种技术。

3)您可以使用UIImage imageWithContentsOfFile:而不是获取数据,然后创build图像。 在这种情况下,将UIImage本身放在caching中,并使用其名称的一个键。