ios - UIGestureRecognizer 导致循环保留?

标签 ios cocoa-touch uigesturerecognizer

我在想,如果在手势识别器的initWithTarget:action: 方法中将目标指定为self,会不会造成循环保留?由于 self 将在 self.gestureRecognizers 中保留识别器,并且手势识别器也可能在 initWithTarget:action 中保留 self。

下面会是解决方案吗?

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

最佳答案

我完全理解在缺乏文档的情况下确认某些事情会让人感到不安。需要注意的重要一点是,根据十多年的惯例,目标- Action 关系永远不会。这是 the relevant docs .请注意以下部分:

Control objects do not (and should not) retain their targets.

“保留……”在 MRC 中表示“持有对……的 strong 引用”

鉴于这是此类交互的记录约定,可以安全地假设,如果 UIGestureRecognizer 的目标操作实现确实保留了对象,那么异常将足够奇怪,它会出现在它的文档中。


附言您不必担心在内存管理环境中引用控件保留目标的注释。 “内存管理”指的是 Cocoa 中的(现在已经过时的)垃圾收集。 MRC 或 ARC 都不是内存管理的。

关于ios - UIGestureRecognizer 导致循环保留?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14612916/

相关文章:

iphone - 从 iPhone 的地址簿中选择一个联系人并在其中添加一个新的电话号码

ios - 进一步说明 "How to implement UISearchController with objective c"

ios - 如何从 Beta 测试人员的设备获取崩溃报告

c# - WP8.1 中的手势识别 block 文本框

objective-c - 获取 UIGestureRecognizer 的 UITouch 对象

ios - KeychainItemWrapper 奇怪的行为,相同项目的现有/不存在项目错误

ios - 允许子类使用子类委托(delegate)

ios - 在 UserDefaults 中保存并添加整数值并在添加值后检索

ios - 检测整个屏幕上的触摸

ios - Swift 4. 你能建议一下返回应用后如何播放视频吗?