17

selfジェスチャーレコグナイザーの方法のように ターゲットを割り当てるinitWithTarget:action:と、循環保持が発生するのではないかと考えていました。selfはレコグナイザを に保持するのでself.gestureRecognizers、ジェスチャ レコグナイザは に self を保持することもできinitWithTarget:actionます。

以下はそれに対する解決策になりますか?

__weak VRDrawer* weakSelf = self;
UIGestureRecognizer* tapRec = [[UITapGestureRecognizer alloc] initWithTarget:weakSelf
                                                                      action:@selector(handleTap:)];
4

2 に答える 2

4
UIGestureRecognizer* tapRec = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTap:)];

これは自己を保持しません。ドキュメントにも記載されています

ビューにレコグナイザーを追加する必要があります。そのビューはレコグナイザーを保持します。リテインサイクルなし。

[aView addGestureRecognizer:tapRec];

addGestureRecognizer:ドキュメントは、ビューがレコグナイザーを保持していることに言及しています


ARC を使用しているので、これで十分です。

UIGestureRecognizer* tapRec = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTap:)];
[aView addGestureRecognizer:tapRec];
于 2013-01-30T20:32:29.973 に答える