Ничего ведь никуда не передает. Зачем-то пустой блок присваиваем в bgSessinCompletionHandler, а потом его передаем и анулируем.
при вызове функции берется блок из аппделегата, копируется, очищается значение в аппделегате (видимо чтобы при повторном вызове функции он больше не выполнялся), затем выполняется скопированная версия блока