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+0x20
和ds:rdi+0x28
都是 block 内捕获的指针。
认为以参数为指标的快照函数的猜测是错误的。
关于ios - 对于 iOS 快速操作(快捷方式项),完成处理程序参数的用途是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39541098/