私は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のこの動作に非常に驚いています!