Я пытаюсь объяснить владение объектами и как 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