Кнопка получения EXC_BAD_ACCESS по методу с ivars - PullRequest
1 голос
/ 06 ноября 2011

Я новичок в obj-c, поэтому я не могу понять некоторые из этих логики.Я хочу понять мой код и логику приложения.Мое приложение представляет собой модификацию простого примера с анимацией UIImageView: это .h (в стандартном шаблоне, основанном на представлении)

#import <UIKit/UIKit.h>
@interface ImageAnimatorViewController : UIViewController {
    UIImageView *animImage;
}
@property (nonatomic, retain) IBOutlet UIImageView *animImage;
- (IBAction)startAnimation;
- (NSArray*)creatAnimation:(NSString*)fileName;
@end

это .m (без стандартных dealloc и viewDidUnload)

@synthesize animImage;
- (IBAction)startAnimation{
    [animImage startAnimating];
}    
- (void)viewDidLoad{
    [super viewDidLoad];

    animImage.animationImages = [self creatAnimation:@"Images.jpg"]; 
    animImage.animationDuration = 1.0f; 
    animImage.animationRepeatCount = 0; 
}    
- (NSArray*)creatAnimation:(NSString*)fileName{
    UIImage *image = [UIImage imageNamed:fileName];
    NSMutableArray *animationImages = [NSMutableArray array];
    for (int i = 0; i<8; i++) {
        CGImageRef imageRef = CGImageCreateWithImageInRect(image.CGImage, 
        CGRectMake(i*600.0f, 0.0f, 600.0f, 262.0f));
        UIImage *animationImage = [UIImage imageWithCGImage:imageRef];
    [animationImages addObject:animationImage];
    [animationImage release];
    }
    return animationImages;
}

Также у меня есть xib с изображением и кнопкой, но когда я нажал b, в консоли произошел сбой и EXC_BAD_ACCESS.В IBAction я понимаю, что imageView не имеет animationImages, но почему?и имеет странный счетчик ссылок = 3, потому что в viewDidLoad есть 2 (и почему 2?).Я добавляю self и self-> prefix в viewDidLoad, но это не результат.animationImages является свойством (копировать), поэтому изображения сохраняются после того, как пул автоматического выпуска сливается с animationImages.Я очень удивлен таким поведением app.10x!

1 Ответ

0 голосов
/ 06 ноября 2011

Не выпускать animationImage в методе createAnimation .Вы также должны очистить память для CGImageRef , используя CGImageRelease

...