Дело не в том, что вы используете изменяемое соединение в одном месте, а не в другом, а в том, что вы вызываете метод синхронного запроса, который выполняется немедленно в текущем потоке, в отличие от асинхронного метода, для работы которого требуется цикл выполнения. Из документации для - [NSURLConnection start]:
Если вы не планируете
соединение в цикле выполнения или в очереди операций перед вызовом этого
метод, соединение планируется в текущем цикле выполнения в
режим по умолчанию.
Вызов асинхронного метода из блока в фоновом потоке избыточен. Вы должны либо вызвать асинхронный метод в главном потоке (он немедленно возвращается и планирует свою работу в фоновом режиме), либо вызвать синхронный метод в асинхронном отправляемом блоке. Делая это вторым способом, вам не нужно иметь дело со всеми обратными вызовами делегатов, но вы отказываетесь от некоторого контроля над операцией загрузки.