UIGestureRecognizer导致循环保留?

Med*_*eda 16 cocoa-touch uigesturerecognizer ios

我在想,如果你self在手势识别器的 initWithTarget:action:方法中分配目标,你会导致循环保留吗?由于self将保留识别器,self.gestureRecognizers并且手势识别器也可能保留自身initWithTarget:action.

以下是它的解决方案吗?

__weak VRDrawer* weakSelf = self;
UIGestureRecognizer* tapRec = [[UITapGestureRecognizer alloc] initWithTarget:weakSelf
                                                                      action:@selector(handleTap:)];
Run Code Online (Sandbox Code Playgroud)

jem*_*ons 20

我完全理解确认缺少文档的东西会让人感到不安.需要注意的重要一点是,通过十多年的惯例,目标 - 行动关系永远不会strong.这是相关的文档.注意部分说:

控制对象不会(也不应该)保留其目标.

"保留......"采用MRC的方式说"持有strong...... 的参考"

鉴于这是此类交互的文档化约定,可以安全地假设,如果UIGestureRecognizer目标 - 动作实现确实保留了对象,那么异常将足够奇怪,以至于它将显示在其文档中.


PS您不必担心引用控件在内存管理环境中保留目标的注释."内存管理"是指Cocoa中的(现在已被删除的)垃圾收集.MRC或ARC都不受内存管理.