Ответ 1
Короткий ответ: параметр не используется в реализации блока в 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
Я запускаю это на Intel64, поэтому первый аргумент должен быть сохранен в регистре rdi
(когда мы вызываем блок под ARC, это экземпляр NSMallocBlock
). Селектора нет, поэтому второй параметр (аргумент bool) должен храниться в регистре rsi
. Но регистр rsi
не используется в коде - он просто отправляет сообщение _updateSnapshotAndStateRestorationWithAction:
объекту ds:rdi+0x20
с аргументом ds:rdi+0x28
.
Оба ds:rdi+0x20
и ds:rdi+0x28
являются захваченными указателями внутри блока.
Подумайте, что ошибка с параметром как индикатором для функции моментального снимка была неправильной.