gpt4 book ai didi

ios - 对于 iOS 快速操作(快捷方式项),完成处理程序参数的用途是什么?

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

iOS 快速操作/快捷方式项由应用程序委托(delegate)的 application(_:performActionFor:completionHandler:) 实现接收。

在该实现中,您应该调用completionHandler。它需要一个 bool 值。

有人知道 Bool 是做什么用的吗?无论我通过 true 还是 false,我都看不出有什么不同。 (事实上​​,即使我忽略调用 completionHandler,我也看不出有什么不同!)

最佳答案

简答:在 iOS 10 中 block 的实现中未使用参数(猜测在 iOS 9 中也是如此,但现在无法检查)。

长答案:让我们看看 completion block 内部发生了什么:

___50-[UIApplication _handleApplicationShortcutAction:]_block_invoke:
push rbp ; XREF=-[UIApplication _handleApplicationShortcutAction:]+132
mov rbp, rsp
mov rax, qword [ds:rdi+0x20]
mov rdx, qword [ds:rdi+0x28]
mov rsi, qword [ds:0x1179e88] ; @selector(_updateSnapshotAndStateRestorationWithAction:)
mov rdi, rax ; argument "instance" for method imp___got__objc_msgSend
pop rbp
jmp qword [ds:imp___got__objc_msgSend]
; endp

我在 Intel64 上运行它,所以第一个参数应该存储在 rdi 寄存器中(当我们在 ARC 下调用 block 时,它是 NSMallocBlock 的一个实例)。没有选择器,所以第二个参数(bool 参数)应该存储在 rsi 寄存器中。但是代码中没有使用 rsi 寄存器——它只是发送消息 _updateSnapshotAndStateRestorationWithAction: 到带有参数 ds 的对象 ds:rdi+0x20: rdi+0x28.

ds:rdi+0x20ds:rdi+0x28 都是 block 内捕获的指针。

认为以参数为指标的快照函数的猜测是错误的。

关于ios - 对于 iOS 快速操作(快捷方式项),完成处理程序参数的用途是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39541098/

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