使用iOS快速操作(快捷项目),完成处理程序参数的目的是什么?

前端之家收集整理的这篇文章主要介绍了使用iOS快速操作(快捷项目),完成处理程序参数的目的是什么?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
应用程式委托执行应用程式(_:performActionFor:completionHandler :)可以收到iOS快速动作/快捷项目.

在这个实现中,你应该调用completionHandler.它需要一个Bool.

有谁知道Bool是什么?无论我是否通过真假,我都看不到任何差别. (其实我觉得没有什么区别,即使我忽略了调用finishHandler!)

解决方法

简短的答案:参数在iOS 10中没有用于实现块(猜测在iOS 9中也是这样,但现在无法检查).

长答案:让我们看看完成块内发生了什么:

___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:rdi 0x20,其参数为ds:rdi 0x28.

ds:rdi 0x20和ds:rdi 0x28都是块内的捕获指针.

认为使用参数作为快照功能指标的猜测是错误的.

猜你在找的iOS相关文章