Вот не правда. DispatchQueue.main… разруливает, UIView.animate.. разраливает. Почему и тут не разрулить?
Если ты в forEach просто делаешь 2+2 тогда не нужно, но если присваиваешь указатель одног объекта в другой на жесткую ссылку, тогда получишь retain как и везде
Не разруливает. В DispatchQueue.main ты чаще всего передаешь замыкание в метод async, в этом методе ты можешь передать указатель одного класса в другой, создав цикл и банг, у тебя цикл. Нигде ничего не разруливается само.
Dispatch.main.async { self. что-то там }
Сработает как надо. Не надо weak писать.
также UIView.animate(…animate: { self.что-то-там…}) тоже отработает без цикла.
Если просто print(self.value) тогда жесткая ссылка создастся лишь пока не выполнится print и потом отпустит. Но как я говорил, ты можешь там делать присвоения, которые могут создать цикл
Поэтому если твой код 100% выполняется мгновенно и self никуда не передается, и замыкание создается лишь сразу в момент выполнения, то weak можешь не писать, захватится сильная ссылка [self] in неявно
Что значит присвоишь не то что надо? я немного не понял.
Второй вариант, ты можешь передать self в какой-то комплишн хендлер куда-то, почему нет, этот вариант очень реален... А когда комплишн выполнится это вообще неизвестно