Вызывает ли доступ к одиночному объекту в замыкании цикл сохранения?
В частности, что-то вроде этого примера:
class TheSingleton
{
static let shared = TheSingleton() //THE SINGLETON
enum Temperature //An associated enum
{
case cold, hot
}
var currentTemp: Temperature? //A non-class-type variable
var aPicture: UIImage? //A class-type variable
func giveMeFive() -> Int //A function
{
return 5
}
//Pay attention to this
func doSomething(onDone: @escaping (Int) -> ())
{
OtherSVC.upload("Mr. Server, do async stuff plz") { (inImage) in
TheSingleton.shared.currentTemp = .cold
TheSingleton.shared.aPicture = inImage
onDone(TheSingleton.shared.giveMeFive())
}
}
}
//Fire the thing
TheSingleton.shared.doSomething { _ in}
Если это так, я действительно не знаю, как написать перехватсписок для этого ...
[weak TheSingleton.shared] (inImage) in
Вы не можете сделать это ^
Я включил три случая, потому что, возможно, тип данных имеет значение?Я думаю, что мне не хватает некоторых основ в списках захвата и циклах сохранения замыканий.
Все, что я знаю, это всякий раз, когда ты получаешь доступ к чему-то вне фигурных скобок замыкания, ты должен отменить / ослабить его, если это тип классаобъект.Это потому, что замыкания создают сильные ссылки по умолчанию.
Я думал, что могу быть дерзким и обойти циклы, вызывая весь синглтон в замыканиях, но я, вероятно, туп, закрывая глаза.
Было бы решение сделать что-то вроде:
var updateDis = TheSingleton.shared.aPicture
OtherSVC.upload("ugh this is lame, and more work") { [unowned updateDis] inPic in
updateDis = inPic
}
?