【发布时间】:2011-02-27 04:51:22
【问题描述】:
我正在根据加速度计输入更改 UIImageView 中的图像。图像存储在数组中。 应用程序可以正常运行一段时间,然后崩溃。
警告:check_safe_call:无法恢复当前帧
- 我在填充数组时没有使用“UIImage ImageNamed”方法。
- 所有图像的总大小约为 12 Mb。但是单个图像非常轻(
- 以防万一有任何自动释放,我已经分配了一个 NSAutoreleasePool 视图确实加载并在 didReceiveMemoryWarning 方法中耗尽它(在应用程序崩溃之前确实被调用了 2、3 次?)。
以下是创建图像数组的代码:
//create autorelease pool as we are creating many autoreleased objects
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
NSMutableArray *finalarr = [[NSMutableArray alloc] initWithCapacity:9];
NSLog(@"start loading");
for(int y = 0; y < 100; y+=10)
{
NSMutableArray *arr = [[NSMutableArray alloc] initWithCapacity:10];
for(int x = 0; x < 10; x++)
{
NSString *imageName = [[NSString alloc] initWithFormat:@"0%d",y + x];
UIImage *img = [[UIImage alloc] initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:imageName ofType:@"png"]];
[arr addObject:img];
[imageName release];
[img release];
}
[finalarr addObject:arr];
[arr release];
}
NSLog(@"done loading");
// Override point for customization after app launch
viewController.imagesArray = finalarr;
[finalarr release];
//retain the array of images
[viewController.imagesArray retain];
//release the aurtorelease pool to free memory taken up by objects enqued for release
[pool release];
由于应用程序运行平稳一段时间,这意味着创建数组绝对不是问题。
在此之后,从 [accelerometer didAccelerate] 调用以下方法
-(BOOL)setImageForX:(int)x andY:(int)y
{
[self.imageView setImage:(UIImage*)[(NSArray*)[self.imagesArray objectAtIndex:y] objectAtIndex:x]];
return TRUE;
}
所以唯一被执行的代码是“UIImageView setImage”。但是这里没有创建对象。
如果代码似乎有任何泄漏或者我做错了什么,请告诉我。
谢谢,
交换无
【问题讨论】:
标签: iphone memory memory-management memory-leaks uiimageview