Я изменяю изображение в UIImageView на основе входа акселерометра. Изображения сохраняются в массиве. Приложение работает нормально, а затем сбой.UIIMageView, предупреждение: check_safe_call: невозможно восстановить текущий кадр
предупреждение: check_safe_call: не может восстановить текущий кадр
- Я не использую метод "UIImage ImageNamed" при заполнении массива.
- Общий размер всех изображений составляет около 12 Мб. Но отдельные изображения очень легкие (< 100 kb), и я использую только одно изображение за раз из массива.
- На всякий случай есть какие-либо авторелеады, я выделил 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];
Как приложение работает плавно на некоторое время, что означает создание массива, безусловно, не является проблемой.
После этого следующий метод вызывается из [акселерометра didAccelerate]
-(BOOL)setImageForX:(int)x andY:(int)y
{
[self.imageView setImage:(UIImage*)[(NSArray*)[self.imagesArray objectAtIndex:y] objectAtIndex:x]];
return TRUE;
}
Таким образом, выполняется только код является «UIImageView setImage». Но здесь не создаются объекты.
Пожалуйста, дайте мне знать, есть ли у кода какие-либо утечки или я делаю что-то неправильно.
Благодаря,
Swapnil
вау! спасибо за подсказку декомпрессии изображения. Я этого не знал. – lukya
Кроме того, вы были свободны от дополнительного звонка. удалил! – lukya