Код внутри async {}
будет выполняться асинхронно. Функция завершения ({ [weak self] ... }
) содержит (сильную по умолчанию) ссылку на объект, вызывающий функцию async
.
Поскольку он асинхронный, у вас нет способа узнать а) когда будет выполнен обратный вызов, б) будет ли он выполнен. Это означает, что сильная ссылка на self
может вызвать утечку памяти.
Вот почему каждый использует [weak self]
для передачи слабой ссылки. Поскольку вызов асинхронный, может случиться так, что, когда обратный вызов будет окончательно выполнен, ARC уже собрал ссылку на self
и, таким образом, self
будет nil
.
Тогда хорошо проверить, существует ли self
, до выполнения кода в обратном вызове.