私は反対しましたが、デリゲート ブロックを使用しています。ARCを使用しています。
@implementation ViewController
- (void)createGame
{
_game = [[MRCircusGame alloc] init];
_game.mainView = self.view;
_game.stageObjectsDictionary = [self getStageObjectsDictionary];
[_game prepareGame];
}
- (NSMutableDictionary *)getStageObjectsDictionary
{
StrongMan *strongMan = [[StrongMan alloc] initAndCreateImageViewWithFrame:kStrongManIntroFrame inView:self.view];
strongMan.isTakingTouches = NO;
strongMan.isVisible = NO;
[tempDictionary setObject:strongMan forKey:kMRCircusStrongMan];
return tempDictionary;
}
@interface MRCircusGame
{
@property (nonatomic, strong) NSMutableDictionary *stageObjectsDictionary;
}
@implementation StrongMan
..
-(void)method
{
__weak typeof (self) weak_self = self;
self.animator.didEndAnimating = ^{
StrongMan *strongRef = weak_self;
strongRef.isAnimating = NO;
[strongRef idle];
};
}
いくつかの質問:
自己への弱い参照を使用しない場合、Xcode はリテイン サイクルの可能性について警告を発します。しかし、私はInstrumentsを見て、使用してもメモリリークは検出されませんでしたself.isAnimating = YES;
この strongRef 回避策を使用しないと、BAD_EXCESS が発生することがあるので、weak_self が解放されたと思いますか? アプリのクラッシュを防ぐために常に strongRef を使用する必要がありますか?
このブロックの実行が終了すると、strongRef は解放されますか?