gpt4 book ai didi

ios - 附加/删除 UIGestureRecognizers 的正确方法

转载 作者:技术小花猫 更新时间:2023-10-29 11:03:37 26 4
gpt4 key购买 nike

在 View 上附加和删除 UIGestureRecognizer 的正确方法是什么?

我通常在 -viewDidLoad 中创建和附加 UIGestureReconizers。我应该在 -viewDidUnload 中使用 removeGestureRecognizer 吗?还是它们会自动删除?

例如,创建一个 UIGestureRecognizer 属性并在 viewController 的 init 方法中对其进行初始化,然后在 -viewDidAppear/-viewDidDisappear 中附加/删除此 gestureRecognizer 属性是否更好? >?

(注意我正在使用 ARC)

谢谢。

最佳答案

基本上,您可以在需要时创建、添加和删除手势识别器。并且“什么时候有意义”取决于一些事情,但通常只取决于你是否将它们保留为 ivars。与 ARC关键是管理强引用;与 ARC默认情况下,ivars 很强大。

假设您添加了一个敲击识别器。在这种情况下,您不需要再次访问识别器。我会这样创建它:

-(void)viewDidLoad{
[super viewDidLoad];
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTap:)];
[self.view addGestureRecognizer:tap];
}

在这种情况下,您不需要做任何其他事情来管理这个识别器。 View 系统对它有很强的引用。您所要做的就是坐下来等待它调用handleTap: .当 View 卸载时,这个点击识别器将被释放。

这种情况也不是在 viewWillAppear: 中添加此识别器的好情况。因为不难想象会导致创建多个识别器的一系列事件。

所以从逻辑上讲,如果你想在外观方法中添加一个识别器,你必须在一个 ivar 中保存对它们的某种引用。但这并不总是一个坏主意。一般来说,你想要引用你的识别器的原因是为了帮助 <UIGestureRecognizerDelegate> 的逻辑。方法,如果使用的话。

我个人永远不会在 initWith.. 中添加识别器稍后附上的方法。唯一的好处是,您在那里创建的任何识别器都将在 View Controller 的整个生命周期内保留。但是由于识别器很明显是 View 系统的一部分,所以这种混淆了 MVC。 cocoa 很重要。同样在内存不足的情况下,导航堆栈上的 Controller View 会被清除,但在这种情况下,识别器可能会无缘无故地继续使用内存(不是那些巨大的对象)。

您当然可以在 view(Will/Did)Appear: 中添加识别器方法并在 view(Will/Did)Disappear: 中删除它.不是我的偏好。我不认为这只是因为 modal显示和删除 View 或导航 push/pop碰巧我应该删除并重新添加我的识别器。

我建议几乎总是使用 viewDidLoad实例化并附加您的识别器。请记住在 viewDidUnload 中消除对它们的任何强引用。在内存不足的情况下提供帮助。再次使用 ARC在 dealloc 中不需要对 ivars 做任何事情。

关于ios - 附加/删除 UIGestureRecognizers 的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10104386/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com