应用程式委托执行应用程式(_: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都是块内的捕获指针.
认为使用参数作为快照功能指标的猜测是错误的.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。