gpt4 book ai didi

ios - UIView的方法困惑

转载 作者:行者123 更新时间:2023-12-01 18:59:29 24 4
gpt4 key购买 nike

我正在遵循“This”指南。捕获UIView touchesBegan,但是当我在NSLog()中使用UIViewController touchesBegan时,它不会触发,但会以混乱的方法触发。有什么办法可以让我两人都开火吗?

最佳答案

当陷入混乱的方法时,您基本上是在告诉Objective-C运行时将其内部的方法选择器(如何调用)的映射更改为方法实现(调用时的作用)。要意识到的关键是,它们实际上不是Objective-C中的同一件事(尽管我们通常在编码时不会考虑这种区别)。如果您可以理解选择器映射的概念,那么了解混乱就很容易。

典型的模式是通过交换选择器,使现有方法(通常是您无法控制的类)与您自己的具有相同签名的自定义方法交换,从而使您的选择器指向现有实现,而现有选择器指向您的实现。

完成此操作后,您实际上可以通过调用自定义方法的选择器来调用原始实现。

对于外部观察者来说,这似乎创建了一个重入循环:

- (void)swizzled_touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
// custom logic

[self swizzled_touchesBegan:touches withEvent:event]; // <-- this actually calls the original implementation

// custom logic
}

…但是因为交换了选择器,所以看来递归的选择器实际上指向原始实现。这就是为什么调用 [view touchesBegan: withEvent:]最终会首先调用您混乱的方法的原因。

干净吗?

关于ios - UIView的方法困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23746685/

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