:パラメータはiOSの10のブロックの実装で使用されていないが(推測それもiOSの9、しかしにすることはできません今すぐチェックしてください)。
長い答え:私はIntel64でこれを実行するので、私たちはARCの下にブロックを呼び出すときに最初の引数は(rdi
レジスタに格納されなければならないことがある
___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
:さんはcompletion
ブロックの内部で何が起こるか見てみましょうNSMallocBlock
のインスタンス)。セレクタがないので、2番目のパラメータ(bool引数)はrsi
レジスタに格納する必要があります。しかし、rsi
レジスタはコードでは使用されていません - という引数でオブジェクトds:rdi+0x20
にメッセージ_updateSnapshotAndStateRestorationWithAction:
を送信するだけです。
ds:rdi+0x20
とds:rdi+0x28
の両方がブロック内にキャプチャされたポインタです。
スナップショット機能の指標としてパラメータを使用した推測が間違っていると考えてください。
あなたは文書を通過しましたか? [application:performActionForShortcutItem:completionHandler](https://developer.apple.com/reference/uikit/uiapplicationdelegate/1622935-application?language=objc) –
@AdilSoomroはい、持っています。あなたは? – matt
私は間違っている可能性がありますが、私はあなたがメソッドの実装を担当し、そのメソッドを条件付きで呼び出す責任があると思います。この場合、 'completionHandler'(実装する責任者)も渡すことができます。アプリケーション(_:performActionFor:completionHandler:) 'あなたは' completionHandler'で実装したロジックに意味をなさないブールを渡すことができ、ビルドしたいものの設計に従います。 –