使用ivars通过方法获取EXC_BAD_ACCESS的按钮

时间:2011-11-06 15:31:56

标签: uiimageview exc-bad-access retaincount

我是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;
}

此外我还有带有imageview和按钮的xib,但是当我按下b时,控制台中出现了崩溃和EXC_BAD_ACCESS。在IBAction中我理解imageView没有animationImages,但为什么呢?并且有奇怪的引用count = 3,因为在viewDidLoad中有2个(为什么2?)。我添加自我和自我&gt; viewDidLoad中的前缀,但没有结果。 animationImages是(复制)属性,因此在使用animationImages排空自动释放池后,图像会保存。我对app.10x的这种行为感到非常惊讶!

1 个答案:

答案 0 :(得分:0)

不要在 createAnimation 方法中发布 animationImage 。您还应该使用 CGImageRelease

清除 CGImageRef 的内存