Как сохранить счет при синхронной рассылке? - PullRequest
2 голосов
/ 14 октября 2019

Я пытаюсь объяснить владение объектами и как GCD работает. Вот что я выучил:

  • функция увеличит количество сохраняемых объектов, вызываемых ею против
  • блока отправки, если только она не захватит self, слабо увеличитсчет.
  • после выполнения отправленного блока освобождает захваченный объект, поэтому количество сохраненных значений self должно уменьшиться. Но это не то, что я вижу здесь. Почему это?
class C {
    var name = "Adam"

    func sync () {
        print("inside func before sync", CFGetRetainCount(self)) // 3
        DispatchQueue.global().sync {
            print("inside func inside sync", CFGetRetainCount(self)) // 4
        }
        sleep(2)
        print("inside func after sync", CFGetRetainCount(self)) // 4 ?????? I thought this would go back to 3
    }
}

Использование:

var c: C? = C()
print("before func call", CFGetRetainCount(c)) // 2
c?.sync()
print("after func call", CFGetRetainCount(c)) // 2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...