私は高レベルのプログラミング言語 (Python) から来て、Objective-C のこの機能を使用するプロジェクトに取り組んでいるので、自動参照カウントを理解しようとしています。後で必要になる ARC のオブジェクトの割り当て解除で問題が発生することがよくありますが、具体的な例が得られたので、説明を求めたいと思います。
- (void) animateGun:(UIImageView *)gun withFilmStrip:(UIImage *)filmstrip{
NSMutableArray *frames = [[NSMutableArray alloc] init];
NSInteger framesno = filmstrip.size.width / gun_width;
for (int x=0; x<framesno; x++){
CGImageRef cFrame = CGImageCreateWithImageInRect(filmstrip.CGImage, CGRectMake(x * gun_width, 0, gun_width, gun_height));
[frames addObject:[UIImage imageWithCGImage:cFrame]];
CGImageRelease(cFrame);
}
gun.image = [frames objectAtIndex:0];
gun.animationImages = frames;
gun.animationDuration = .8;
gun.animationRepeatCount = 1;
[gun startAnimating];
dispatch_after(dispatch_time(DISPATCH_TIME_NOW,(arc4random() % 300)/100 * NSEC_PER_SEC), dispatch_get_current_queue(),^{
[self animateGun:leftGun withFilmStrip:[self getFilmStripForAction:gunShoot andTeam:nil withWeapon:nil]];
});
}
このコード スニペットの背後にある考え方は単純(UIImageView*)gun
です(NSMutableArray *)frames
。(UIImage *)filmstrip
アニメーションで使用されるすべてのフレームを含む画像です。アニメーションの最初の反復は機能しますが、2 回目の反復で問題が発生し-[UIImage _isResizable]: message sent to deallocated instance ...
ます。これは-[UIImage _contentStretchInPixels]: message sent to deallocated instance ...
-[NSArrayI release]: message sent to deallocated instance ...
gun.animationImages = frames;
しかし、理由がわかりません。問題の修正を要求しているわけではありませんが、ここで何が起こっているのかを理解するのに役立ちます。ありがとう。