Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
var numberOfLinesLogged = 0
let logger1 = {[numberOfLinesLogged] in
numberOfLinesLogged += 1
print("Lines logged: \(numberOfLinesLogged)")
}
Нужно было упомянуть и о capture list.
var numberOfLinesLogged = 0
let logger1 = {[numberOfLinesLogged] in
numberOfLinesLogged += 1
print("Lines logged: \(numberOfLinesLogged)")
}var numberOfLinesLogged = 0
let logger1 = { [numberOfLinesLogged] in
print("Lines logged: \(numberOfLinesLogged)")
}
numberOfLinesLogged += 1
logger1()
«Defining a Capture List
Each item in a capture list is a pairing of the weak or unowned keyword with a reference to...»
Отрывок из книги: Apple Inc. «The Swift Programming Language (Swift 5)». Apple Books.
Да, и мне не совсем ясен смысл capture list вообще без модификатора unowned или weak, ведь как раз его смысл — избегать циклов сильных ссылок.
func sing() -> () -> Void {
let taylor = Singer()
let singing = {
taylor.playSong()
return
}
return singing
}let singFunction = sing()
singFunction()let singFunction = sing()
singFunction()func sing() -> () -> Void {
let taylor = Singer()
print("ARC count taylor = \(CFGetRetainCount(taylor))")
print("ARC count self = \(CFGetRetainCount(self))")
let singing = {
taylor.playSong()
print("Captured")
print("ARC count taylor = \(CFGetRetainCount(taylor))")
print("ARC count self = \(CFGetRetainCount(self))")
return
}
return singing
}
print("sing")
let singFunction = sing()
singFunction()
print("ARC count self = \(CFGetRetainCount(self))")
print("Finish")sing
ARC count taylor = 2
ARC count self = 15
song playing
Captured
ARC count taylor = 2
ARC count self = 16
ARC count self = 16
Finish
I'm deinited
Кстати, а почему каунтер сразу 2 равен?
Не в курсе, расскажите!
Я не знаю ) Сам заметил только сейчас ) Раньше, мне казалось с 1 начиналось. Правда я это послежний раз делал ооочень давно
Хм, странно ) дкйствительно в плэйграунде счетчик ссылок повышается и не освобождается
do {
print("sing")
let singFunction = sing()
singFunction()
print("Finish")
}
Списки захвата в Swift: в чём разница между ссылками weak, strong и unowned?