Ответы: -3-ий тип reference type - actor (буду честен, сначала ответил функция, но кложура это и есть функция, потому что в интернете пишут про классы, функции и кложуры - в основном, например в статьях на хабре, понимаю, Хабр не то место где нужно черпать знания. Но начинающему разрабу всегда тяжко в фильтрации материалов, он не понимает, что хорошо, а что плохо, как в моем случае. но спасибо что есть Вы!); -2^64 это 16 Эксабайтов. 14:00 Слепок оперативной памяти и кладет его на диск - просто копию оперативки? извините за глупый вопрос, вот не понятно конкретно слепок чего и что подразумевается под этим? не могу представить абстрактно понял что нужно глянуть занятия 13-16. а по факту лучше все пересмотреть. после того, как есть некое понимание в разработке, смотреть ваши толковые ролики очень и очень полезно. Дякую и Рахмет за проделанный труд! 1час 20 минут и 57 секунд - пролетают не заметно. особенно, когда в лекции полезна каждая минута.
Спасибо большое за лекцию! Как писали уже ранее на одном дыхании посмотрела. Я знала, что здесь будет что-то, что меня удивит, и так и есть - потрясающе полный и интересный материал по кложурам. Я не знала половину материала, было очень полезно. Мне кажется, чуть изменился способ подачи информации по сравнению с первыми видео этого курса. Очень нравится, особенно рубрика "Это спрашивают на собеседование" и "Этого не знают даже senior". Очень много полезной информации в доступном формате. Действительно, то, что вы делаете на просторе UA-cam, на голову выше и не сравнится с материалами, которые дают на курсах (есть с чем сравнить). Формат 1ч20м чистой информации просто удивляет, и хочется, чтобы ваша мотивация только росла. Желаю очень много подписок на Patreonе.
Вячеслав, мне нравится что в одном видео вы объединяете всё по теме, в дном видео по таймкодам отыскать проще(как мне кажется) для повторения, чем ещё и по разным видео искать.💙💛
Спасибо, Слава! Освежаю теорию, готовясь к собесам и вспоминаю курсы Лёши Скутаренко. Прям по простому, с примерами и визуализацией. Думаю для молодых специалистов это топ. Было бы еще неплохо обзавестить каким-то комьюнити, в котором студенты смогут выкатывать свои домашние задания и обсуждать их.
Добавьте в меню альтернативу! Фильтр, v60, аэропресс. Помимо сладостей ещё хорошо иметь какие-нибудь сэндвичи, их можно прямо на месте в электрогриле жарить
Здравствуйте Вячеслав! Видеоурок вышел просто супер, спасибо за объемную информацию. Вячеслав, хотел уточнить, можно ли получить презентации с ваших видеоуроков? Было бы очень круто.
Спасибо за лекцию! Достаточно подробно описана работа именно с объектами. Жаль правда не копнули немного в глубину, по типу того как именно удаляются weak и unowned ссылки, сразу они удаляются или какой у них жизненный цикл удаления, Side Tables и так далее. Но подача материала очень прияная. Еще раз спасибо!
Спасибо, это одна из лучших лекций по ARC! Можно еще рассказать зачем все-таки два вида слабых ссылок (weak и unowned). Если они оба выполняют одинаковую работу, то в чем профит, кроме опциональности? unowned потребляет меньше ресурсов?
Надіюсь, що виконав все правильно, але наче виглядає досить добре :) Код: class Person { var name: String var surname: String var home : Home? var saying : () -> Void = {} init(name: String, surname: String) { self.name = name self.surname = surname } convenience init() { self.init(name: "Unknown", surname: "Unknown") } convenience init(surname: String) { self.init(name: "Unknown", surname: surname) } deinit { print("I have deleted class - Person") } } // Створив почтаковий класс з функцією та параметрами // Добавив деініціалізатор та кастомні ініціалізатори // Класс Персон ссилається на cat1.name через clousure class Home { var typeofhome : String var garage : Garage? var inhabitant : Cat? init(typeofhome: String) { self.typeofhome = typeofhome } convenience init() { self.init(typeofhome: "Unknown") } deinit { print("I have deleted class - Home") } } // Створив новий класс з функцією та параметрами // Добавив деініціалізатор та кастомні ініціалізатори // Класс Cat1.home ссилається на home1 class Garage { var carplaces : Int var width : Int var height : Int var owner : Person? var inhabitant : (() -> Void)? init(carplaces: Int, width: Int, height: Int) { self.carplaces = carplaces self.width = width self.height = height } convenience init() { self.init(carplaces: 0, width: 0, height: 0) } func printsome () -> Void { print("It's a youre garage") } deinit { print("I have deleted class - Garage") } } // Створив новий класс з функцією та параметрами // Добавив деініціалізатор та кастомні ініціалізатори class Cat { var name : String var owner : Person var home : Home? var animalsVoice : (() -> Void)? init(name: String, owner: Person) { self.name = name self.owner = owner } convenience init() { self.init(name: "Unknown", owner: Person()) } deinit { print("I have deleted class - Cat") } } // Створив новий класс з функцією та параметрами // Добавив деініціалізатор та кастомні ініціалізатори class Dog { var name : String var owner : Person? var animalsVoice : (() -> Void)? var home : Home? init(name: String, owner: Person) { self.name = name self.owner = owner } convenience init() { self.init(name: "Unknown", owner: Person()) } deinit { print("I have deleted class - Dog") } } // Створив новий класс з функцією та параметрами // Добавив деініціалізатор та кастомні ініціалізатори do { var person1 = Person(name: "Max", surname: "Vazocskii") var home1 = Home(typeofhome: "Apartaments") var garage1 = Garage() var cat1 = Cat() var dog1 = Dog() person1.saying = { print(cat1.name) } cat1.home = home1 home1.garage = garage1 garage1.inhabitant = { print(dog1.name) } dog1.owner = person1 }
Третьим ссылочным типом может являтся структура если ее передать в метод с использованием аргумента inout. В таком случае передается ссылка а не копия.
Тут все правильно. Сам объект находится в куче, но ссылка на этот объект находится в стеке. Мы работаем со ссылками которые лежат в стеке, но эти ссылки ссылаются на объекты в куче.
Мой оффлайн курс был рассчитан на Стронг Джуниоров, что бы после курса им не хватало только коммерческого опыта что бы назваться мидлом. Поэтому так и получается
Интересно, а что произойдет, если два класса будут ссылаться друг на друга слабыми ссылками? Классы освободятся раньше времени? Код в playground выполняется одинаково. В чем тогда разница? Почему бы повсеместно не использовать weak? Или дело все чисто в неудобстве использования из-за опционалов?
А функция или замыкание внутри структуры хранится вместе со структурой в стеке или в куче? И наоборот: где хранятся int и string, принадлежащие классу, вместе с ним в куче или все же в стеке?
если экземпляр типа значения является частью экземпляра ссылочного типа, то значение сохраняется в куче вместе с экземпляром ссылочного типа. Например, структура сама по себе хранится в стеке, но если эта структура расположена в классе, то так как класс хранится в куче, то и структура будет сохранена в куче.
Зависит от версии Свифта, в последних да. Эта функциональность так же дает возможность в будущем добавить сторед проперти в extension, но не думаю что это в ближайшем будущем допилят.
Вячеслав, если не трудно, скажите пожалуйста, если ARC контролирует память для ссылочных типов (считает ссылки), то чем контролируются тип значения, когда система понимает что нужно удалить их или она удаляет их, когда они отработали в своем скоупе?
@@IlnurMugaev во время выхода фичи - да. Но они продолжали работать над back-deployment что бы это работало с 13+, но я не следил за этими изменениями после релиза. Так что теоретически уже может работать и с 13+ если доделали.
2 в 64 степени - 1 = 18 446 744 073 709 551 615. Или другими словами: Восемнадцать квинтиллионов четыреста сорок шесть квадриллионов семьсот сорок четыре триллиона семьдесят три миллиарда семьсот девять миллионов пятьсот пятьдесят одна тысяча шестьсот пятнадцать.
Заціни прикол. class A { deinit { print("Deinit") } } var a: A? = A() print("\(CFGetRetainCount(a))") a = nil Як думаєш, яке число буде в print? Знаєш чому так?
Доклад Максима про value types
ua-cam.com/video/8L5cUiV1qDo/v-deo.html
Поддержите канал на патреоне!
www.patreon.com/bwswift
почти полтора часа нереально крутого урока! Такого точно не расскажут на курсах. Спасибо большое
Благодарю!
Лучшее объяснение данной темы которое я слышал! Большое спасибо)
Благодарю!
Ответы:
-3-ий тип reference type - actor (буду честен, сначала ответил функция, но кложура это и есть функция, потому что в интернете пишут про классы, функции и кложуры - в основном, например в статьях на хабре, понимаю, Хабр не то место где нужно черпать знания. Но начинающему разрабу всегда тяжко в фильтрации материалов, он не понимает, что хорошо, а что плохо, как в моем случае. но спасибо что есть Вы!);
-2^64 это 16 Эксабайтов.
14:00 Слепок оперативной памяти и кладет его на диск - просто копию оперативки? извините за глупый вопрос, вот не понятно конкретно слепок чего и что подразумевается под этим? не могу представить абстрактно
понял что нужно глянуть занятия 13-16. а по факту лучше все пересмотреть.
после того, как есть некое понимание в разработке, смотреть ваши толковые ролики очень и очень полезно.
Дякую и Рахмет за проделанный труд! 1час 20 минут и 57 секунд - пролетают не заметно. особенно, когда в лекции полезна каждая минута.
Спасибо большое за лекцию! Как писали уже ранее на одном дыхании посмотрела. Я знала, что здесь будет что-то, что меня удивит, и так и есть - потрясающе полный и интересный материал по кложурам. Я не знала половину материала, было очень полезно.
Мне кажется, чуть изменился способ подачи информации по сравнению с первыми видео этого курса. Очень нравится, особенно рубрика "Это спрашивают на собеседование" и "Этого не знают даже senior". Очень много полезной информации в доступном формате.
Действительно, то, что вы делаете на просторе UA-cam, на голову выше и не сравнится с материалами, которые дают на курсах (есть с чем сравнить). Формат 1ч20м чистой информации просто удивляет, и хочется, чтобы ваша мотивация только росла. Желаю очень много подписок на Patreonе.
Благодарю за поддержку и ваш тёплый комментарий!
Вячеслав вы самый лучший!Лучше вас никто не учит!
Спасибо!
Самый лучший канал по iOS разработке, который я видел. Спасибо большое!
❤️
Дякую за вичерпний матеріал, та незрівнянну подачу!!!
❤️
Спасибо, Вячеслав за отличный материал!
👍
Слава, спасибо тебе за лекцию, все как всегда, на высшем уровне!
Дякую!
невероятно классная лекция
канал тоже поражает полезностью
Все очень просто и очень интересно
Огромное вам спасибо за ваш труд !!!!
❤️
Отличная подача материала! Пожалуй, самые интересные уроки по Свифту в рунете
Вячеслав, мне нравится что в одном видео вы объединяете всё по теме, в дном видео по таймкодам отыскать проще(как мне кажется) для повторения, чем ещё и по разным видео искать.💙💛
Дякую!
Лучшее объяснение ARC👍Тысяча благодарностей☺
👍
спасибо большое ,2 месяца изучаю Свифт , вы объясните проще всех))
👍
Круто, професійно, доступно! Дякую!
Дякую за комент!
Спасибо, Слава! Освежаю теорию, готовясь к собесам и вспоминаю курсы Лёши Скутаренко. Прям по простому, с примерами и визуализацией. Думаю для молодых специалистов это топ.
Было бы еще неплохо обзавестить каким-то комьюнити, в котором студенты смогут выкатывать свои домашние задания и обсуждать их.
Благодарю за комментарий, есть чат в телеграмме, там можно задать вопросы и получить ответы
Дуже розгорнута відповідь на цю тему. Гарні прикладі. Лекція проглядається на одному диханні.
Дякую!
Лучшее объяснение arc! Спасибо!
❤️
Добавьте в меню альтернативу! Фильтр, v60, аэропресс. Помимо сладостей ещё хорошо иметь какие-нибудь сэндвичи, их можно прямо на месте в электрогриле жарить
Очередное спасибо! И только успехов вам!
Лучший канал по swift!)спасибо за уроки!!!
Спасибо за комментарий !
Большое спасибо за Ваш информативный урок!
И вам спасибо!
Прекрасные 80 минут!
👍
Здравствуйте Вячеслав! Видеоурок вышел просто супер, спасибо за объемную информацию.
Вячеслав, хотел уточнить, можно ли получить презентации с ваших видеоуроков? Было бы очень круто.
53:02
почему когда pat = nil, все так вызвался deinit, если есть strong reference cycle между command и pat ?
Спасибо большое, за лекцию! Удачи в развитии канала :)
Благодарю!
Шикарный контент. Наткнулся случайно на deinit видео. Молодец. Спасибо
👍
Спасибо за труд, очень современно и доходчиво! Развития каналу!
Благодарю
Лучший, спасибо огромное!
👍
Оставляю комментарий в поддержку канала)
Благодарю!
Спасибо за лекцию! Достаточно подробно описана работа именно с объектами. Жаль правда не копнули немного в глубину, по типу того как именно удаляются weak и unowned ссылки, сразу они удаляются или какой у них жизненный цикл удаления, Side Tables и так далее. Но подача материала очень прияная. Еще раз спасибо!
Копнуть в глубину это +2ч к длине видео
Спасибо за материал. Всегда очень доходчиво.
Третий вариант ссылочного типа в swift это, скорее всего, Indirect enum,
Нет. Подсказку ищи в разделе документации concurrency
столько нюансов, спасибо за разъяснение!
👍
Отличный урок! Большое спасибо
Благодарю!
крута лекція, дякую !
І вам дякую!
Кака же ясно объяснили, спасиииибо
👍
Спасибо за лекцию! Очень интересно и понятно, рада, что нашла ваш канал, дай бог вам здоровья ! Слава Украине
Благодарю! Героям слава!
Поддерживаю предыдущего оратора
@@emilsh7 👍
Длинные лекции топ
Благодарю!
Офигенная подача!
👍
Спасибо за очередное невероятно познавательное видео. Листал сообщения, но не нашел такой же мысли: третий ссылочный тип это Функции высшего порядка?
наверное после лекции внимание рассеялось, увидал правильный ответ - Актор из wwdc21
Не
Спасибо, это одна из лучших лекций по ARC! Можно еще рассказать зачем все-таки два вида слабых ссылок (weak и unowned). Если они оба выполняют одинаковую работу, то в чем профит, кроме опциональности? unowned потребляет меньше ресурсов?
Производительность. Unowned быстрее
Спасибо за Ваши талантливые уроки! А про акторы сможете также понятно рассказать?
В акторах нет ничего сложного :) но эта тема для отдельного плейлиста по многопоточности
Надіюсь, що виконав все правильно, але наче виглядає досить добре :)
Код:
class Person {
var name: String
var surname: String
var home : Home?
var saying : () -> Void = {}
init(name: String, surname: String) {
self.name = name
self.surname = surname
}
convenience init() {
self.init(name: "Unknown", surname: "Unknown")
}
convenience init(surname: String) {
self.init(name: "Unknown", surname: surname)
}
deinit {
print("I have deleted class - Person")
}
}
// Створив почтаковий класс з функцією та параметрами
// Добавив деініціалізатор та кастомні ініціалізатори
// Класс Персон ссилається на cat1.name через clousure
class Home {
var typeofhome : String
var garage : Garage?
var inhabitant : Cat?
init(typeofhome: String) {
self.typeofhome = typeofhome
}
convenience init() {
self.init(typeofhome: "Unknown")
}
deinit {
print("I have deleted class - Home")
}
}
// Створив новий класс з функцією та параметрами
// Добавив деініціалізатор та кастомні ініціалізатори
// Класс Cat1.home ссилається на home1
class Garage {
var carplaces : Int
var width : Int
var height : Int
var owner : Person?
var inhabitant : (() -> Void)?
init(carplaces: Int, width: Int, height: Int) {
self.carplaces = carplaces
self.width = width
self.height = height
}
convenience init() {
self.init(carplaces: 0, width: 0, height: 0)
}
func printsome () -> Void {
print("It's a youre garage")
}
deinit {
print("I have deleted class - Garage")
}
}
// Створив новий класс з функцією та параметрами
// Добавив деініціалізатор та кастомні ініціалізатори
class Cat {
var name : String
var owner : Person
var home : Home?
var animalsVoice : (() -> Void)?
init(name: String, owner: Person) {
self.name = name
self.owner = owner
}
convenience init() {
self.init(name: "Unknown", owner: Person())
}
deinit {
print("I have deleted class - Cat")
}
}
// Створив новий класс з функцією та параметрами
// Добавив деініціалізатор та кастомні ініціалізатори
class Dog {
var name : String
var owner : Person?
var animalsVoice : (() -> Void)?
var home : Home?
init(name: String, owner: Person) {
self.name = name
self.owner = owner
}
convenience init() {
self.init(name: "Unknown", owner: Person())
}
deinit {
print("I have deleted class - Dog")
}
}
// Створив новий класс з функцією та параметрами
// Добавив деініціалізатор та кастомні ініціалізатори
do {
var person1 = Person(name: "Max", surname: "Vazocskii")
var home1 = Home(typeofhome: "Apartaments")
var garage1 = Garage()
var cat1 = Cat()
var dog1 = Dog()
person1.saying = {
print(cat1.name)
}
cat1.home = home1
home1.garage = garage1
garage1.inhabitant = {
print(dog1.name)
}
dog1.owner = person1
}
На одном дыхании 😊
посмотрел Максима, очень интересно.
👍
Небольшая ремарка, что стэк находится не в ОЗУ, а в кэш-памяти процессора и могут быть помещены в Heap
👍
Третьим ссылочным типом может являтся структура если ее передать в метод с использованием аргумента inout. В таком случае передается ссылка а не копия.
Структура в таком варианте действительно передается по ссылке, но это не делает ее ссылочным типом. А я спрашиваю именно за еще один тип данных
26:00 В стеке? Референс типы же вроде хранятся в куче
Тут все правильно. Сам объект находится в куче, но ссылка на этот объект находится в стеке. Мы работаем со ссылками которые лежат в стеке, но эти ссылки ссылаются на объекты в куче.
Спасибо большое за такое объемное видео!
Подскажите, вы занимаетесь менторством?
Да, но сейчас поставил на паузу
Top like Always 🎉💪🏼
3й тип акторы?
Да!
Не могли бы уточнить, методы/функции хранятся в сегменте TEXT памяти и в каком виде?
когда-нибудь скажут: какие-то сильные джуны пошли
а им ответят: мы учились у В’ячеслав Білий
Мой оффлайн курс был рассчитан на Стронг Джуниоров, что бы после курса им не хватало только коммерческого опыта что бы назваться мидлом. Поэтому так и получается
Интересно, а что произойдет, если два класса будут ссылаться друг на друга слабыми ссылками? Классы освободятся раньше времени? Код в playground выполняется одинаково. В чем тогда разница? Почему бы повсеместно не использовать weak? Или дело все чисто в неудобстве использования из-за опционалов?
Вячеслав, спасибо большое за огромный пласт работы! Очень полезно!
А где можно посмотреть про диспечиризацию?
Еще не снял
лекция огонь
🔥
Просто супер! 👍👍👍
👍
Спасибо!
👍
Жаль что не была затронута тема Side table
Это очень глубоко, не в курсе для начинающих
А функция или замыкание внутри структуры хранится вместе со структурой в стеке или в куче? И наоборот: где хранятся int и string, принадлежащие классу, вместе с ним в куче или все же в стеке?
Смотрите доклад Макса в закрепленном коментарии
если экземпляр типа значения является частью экземпляра ссылочного типа, то значение сохраняется в куче вместе с экземпляром ссылочного типа. Например, структура сама по себе хранится в стеке, но если эта структура расположена в классе, то так как класс хранится в куче, то и структура будет сохранена в куче.
Спасибо! Hearthstone по итогу с утечкой или не правильно понял?)
Да, он был с утечкой, когда я в него играл пару лет назад.
Есть мнение, что weak ссылка ссылается не на Heap а на Side Table, так ли это?
Зависит от версии Свифта, в последних да. Эта функциональность так же дает возможность в будущем добавить сторед проперти в extension, но не думаю что это в ближайшем будущем допилят.
Вячеслав, если не трудно, скажите пожалуйста, если ARC контролирует память для ссылочных типов (считает ссылки), то чем контролируются тип значения, когда система понимает что нужно удалить их или она удаляет их, когда они отработали в своем скоупе?
Посмотрите как устроен стек. Когда со стека что-то уходит - оно умирает. Жизнь value types контролируется принципом работы стека.
@@bwswift Благодарю
Reference Type - Classes, Closures, Protocols
One more
@@bwswift Functions
@@vladloktionov5860 functions = closures. So, one more!
рекурсия@@bwswift
@@AlexandrRudenok Актор!
3 тип - функции?
Это кложуры, их уже назвал
3-й reference type - indirect enum?
Не.
@@bwswift аргументы inout?
@@IlnurMugaev не. Прдсказку ищи в разделе документации concurrency
@@bwswift ага нашел, actor вроде используется с версии Swift 5.5, это, насколько я понял, минимальная версия iOS 15 должна быть?
@@IlnurMugaev во время выхода фичи - да. Но они продолжали работать над back-deployment что бы это работало с 13+, но я не следил за этими изменениями после релиза. Так что теоретически уже может работать и с 13+ если доделали.
Вячеслав, добрый день. Когда может быть куча не одна, а несколько?
Відповів в телеграм каналі
t.me/bwswift/442
Спасибо, присоединился)@@bwswift
Стосовно третього референс-типу, то це здається AnyObject
Не вгадав.
@@bwswift я загуглив і знайшов що до референс-типу ще додають функції, але ж це майже те саме що і замикання
и тот ref-type, который я напишу в комментарии: функция)
И будеш не прав :)
спасибо!
👍
Спасибо !!!!
👍
Вашего отца не Генадий Валентинович Писаренко зовут? Вы из Запорожья? Вы один в один похожи
Ні
а GCD будет?)
Будет но не скоро
In Swift, classes, actors, and closures are all reference types. upd: приєднуюсь до всіх вдячних людей))
Все вірно!
👍
Третий референс тип - это Delegate!
Нет!
@@bwswift Функции
@@ТауекелАлтынбеков-о9ъ этот я назвал! Не считается!
@@bwswift Акторы
@@ТауекелАлтынбеков-о9ъ
В Swift классы, акторы и замыкания являются ссылочными типами.
Самая сложная тема, порой не понятно в какой последовательности ARC удаляет классы….
на каком первая пропала стронг ссылка тот и удаляется первым и дальше каскадом
И ф-ции 3ий тип.
➖
✊🏻
👍
18.4 ярда тб может поддерживать операционка на 64 битах 😂
Пора уже свою школу открывать )
😂
Коротко о Reference Cycle - Цирк уехал, клоуны остались
Хахаха! 🔥
Привет из Москвы 💙💛
Печально, что ваши новые видео выходят на украинском языке и недоступны для понимания россиянам и многим другим жителям СНГ :(
Може це знак що пора починати вчити українську?
я на видео у Максима Дивертидо подучился понимать украинскую мову @@bwswift
2 в 64 степени - 1 = 18 446 744 073 709 551 615. Или другими словами: Восемнадцать квинтиллионов четыреста сорок шесть квадриллионов семьсот сорок четыре триллиона семьдесят три миллиарда семьсот девять миллионов пятьсот пятьдесят одна тысяча шестьсот пятнадцать.
Всего-то
Заціни прикол.
class A {
deinit {
print("Deinit")
}
}
var a: A? = A()
print("\(CFGetRetainCount(a))")
a = nil
Як думаєш, яке число буде в print?
Знаєш чому так?
А чому так?
Треба гуглити, але я не знаю чому так індексація починається@@TheKarleone77