对于 iOS 快速操作(快捷方式项),完成处理程序参数的用途是什么?
With an iOS quick action (shortcut item), what is the purpose of the completion handler parameter?
iOS 快速操作/快捷方式项被 application(_:performActionFor:completionHandler:)
的应用程序委托实现接收。
在该实现中,您应该调用 completionHandler
。它需要一个布尔值。
有人知道 Bool 是做什么用的吗?无论我通过 true
还是 false
,我都看不出有什么区别。 (事实上 ,即使我忽略调用completionHandler
,我也看不出有什么区别!)
简答:iOS 10 中块的实现中未使用参数(猜测在 iOS 9 中也是如此,但无法检查现在)。
长答案:让我们看看 completion
块内部发生了什么:
___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
I 运行 this on Intel64, 所以第一个参数应该存储在 rdi
寄存器中(当我们在 ARC 下调用块时它是 NSMallocBlock
的一个实例) .没有选择器,所以第二个参数(bool 参数)应该存储在 rsi
寄存器中。但是 rsi
寄存器未在代码中使用 - 它只是将消息 _updateSnapshotAndStateRestorationWithAction:
发送到对象 ds:rdi+0x20
并带有参数 ds:rdi+0x28
.
ds:rdi+0x20
和ds:rdi+0x28
都是块内的捕获指针。
认为以参数为指标的快照功能猜测错误
iOS 快速操作/快捷方式项被 application(_:performActionFor:completionHandler:)
的应用程序委托实现接收。
在该实现中,您应该调用 completionHandler
。它需要一个布尔值。
有人知道 Bool 是做什么用的吗?无论我通过 true
还是 false
,我都看不出有什么区别。 (事实上 ,即使我忽略调用completionHandler
,我也看不出有什么区别!)
简答:iOS 10 中块的实现中未使用参数(猜测在 iOS 9 中也是如此,但无法检查现在)。
长答案:让我们看看 completion
块内部发生了什么:
___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
I 运行 this on Intel64, 所以第一个参数应该存储在 rdi
寄存器中(当我们在 ARC 下调用块时它是 NSMallocBlock
的一个实例) .没有选择器,所以第二个参数(bool 参数)应该存储在 rsi
寄存器中。但是 rsi
寄存器未在代码中使用 - 它只是将消息 _updateSnapshotAndStateRestorationWithAction:
发送到对象 ds:rdi+0x20
并带有参数 ds:rdi+0x28
.
ds:rdi+0x20
和ds:rdi+0x28
都是块内的捕获指针。
认为以参数为指标的快照功能猜测错误