Ios 关于重用UITouch和UIEvent对象

Ios 关于重用UITouch和UIEvent对象,ios,swift,uitouch,uievent,Ios,Swift,Uitouch,Uievent,我试图理解UIEvent,UITouch对象重用,所以我尝试测试,但结果让我感到困惑 这是我的密码 class CustomView: UIView { override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { print("==========================") print("Event Object : \(Unmanaged.p

我试图理解
UIEvent
UITouch
对象重用,所以我尝试测试,但结果让我感到困惑

这是我的密码

class CustomView: UIView {
    override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
        print("==========================")
        print("Event Object : \(Unmanaged.passUnretained(event!).toOpaque())")
        for (index, touch) in touches.enumerated() {
            print("\(index)'s, UITouch Object : \(Unmanaged.passUnretained(touch).toOpaque())")
        }
        print("==========================")
    }
}

class ViewController: UIViewController {

    @IBOutlet weak var skyBlueView: CustomView!
    var previousTouch:UITouch?
    var currentTouch:UITouch?
    override func viewDidLoad() {
        super.viewDidLoad()
        self.view.isMultipleTouchEnabled = true
    }

    override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
        print("==========================")
        print("Event Object : \(Unmanaged.passUnretained(event!).toOpaque())")
        for (index, touch) in touches.enumerated() {
            print("\(index)'s, UITouch Object : \(Unmanaged.passUnretained(touch).toOpaque()) Tap Count: \(touch.tapCount)")
        }
        print("==========================")
    }
}
类自定义视图:UIView{
覆盖func TouchesBegind(Touchs:Set,带有事件:UIEvent?){
打印(“========================================”)
打印(“事件对象:\(Unmanaged.passUnretained(事件!).toOpaque())”)
用于触摸中的(索引,触摸)。枚举(){
打印(\(索引),UITouch对象:\(非托管.passUnrepained(touch.toOpaque()))
}
打印(“========================================”)
}
}
类ViewController:UIViewController{
@IBVAR skyBlueView:CustomView!
var previousTouch:UITouch?
var currentTouch:UITouch?
重写func viewDidLoad(){
super.viewDidLoad()
self.view.isMultipleTouchEnabled=true
}
覆盖func TouchesBegind(Touchs:Set,带有事件:UIEvent?){
打印(“========================================”)
打印(“事件对象:\(Unmanaged.passUnretained(事件!).toOpaque())”)
用于触摸中的(索引,触摸)。枚举(){
打印(“\(索引)”,UITouch对象:\(非托管.passUnrepained(touch.toOpaque())点击计数:\(touch.tapCount)”)
}
打印(“========================================”)
}
}
我希望相同坐标的触摸对象是相同的

但结果并非如此。这是我的结果

这是我的问题

  • UIEvent对象何时被释放?UIEvent仍然被重用

  • 在相同的坐标上,抽头计数增加,但对象不同 如何在UITouch对象之间共享点击计数

  • 发生9次触摸,但只有4个UITouch对象(0x00007f9881c086f0、0x00007f9881d04000、0x00007f9881e02650、0x00007f988500c5c0)正在重用?它是如何工作的