1

私は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がないことを理解していますが、なぜですか?そして、viewDidLoadには2(そしてなぜ2?)があるため、奇妙な参照カウント=3になります。viewDidLoadにselfとself->プレフィックスを追加しましたが、結果がありません。AnimationImagesは(コピー)プロパティであるため、自動解放プールがanimationImagesで排出された後、画像が保存されます。app.10xのこの動作に非常に驚いています!

4

1 に答える 1

0

createAnimationメソッドでanimationImageを解放しないでください。また、 CGImageReleaseを使用してCGImageRefのメモリをクリーンアップする必要があります

于 2011-11-06T16:00:25.317 に答える