Caching images

แชร์
ฝัง
  • เผยแพร่เมื่อ 30 ก.ย. 2024
  • Добрый день!
    Сегодня мы с вами поговорим об экономии интернета! :)
    А именно мы поговорим о том, как хранить изображения в кеше, чтобы пользователь не качал качал их заново при повторном заходе на один и тот же экран с изображением.
    Поехали!
    Ссылка на конечный проект: github.com/Iva...
    Подробнее об изучении Swift вы можете узнать на нашем сайте:
    swiftbook.org/
    Наш форум, где вы всегда можете задать ваши вопросы:
    forum.swiftboo...
    Присоединяйтесь к нашей группе в "ВКонтакте":
    swiftbook
    Присоединяйтесь к нашей группе в "facebook":
    / swiftbook.ru
    Мы в telegram:
    t.me/swiftbook...

ความคิดเห็น • 15

  • @99Fiero
    @99Fiero 6 ปีที่แล้ว +1

    Иван, добрый день. Расскажите, пожалуйста, про сбегающие замыкания. Читал про них в книге, но все равно никак не могу понять концепцию. Пара примеров с объяснениями будут весьма полезны. Спасибо.

  • @ДмитрийБудко-х4й
    @ДмитрийБудко-х4й 6 ปีที่แล้ว +1

    Очень полезный урок! Спасибо Иван!!!

  • @ДмитрийБудко-х4й
    @ДмитрийБудко-х4й 6 ปีที่แล้ว +1

    В конце видео немного не так склеили голос) 2 раза «с Вами был»
    но на качество контента не влияет) спасибо за урок!

    • @SwiftBook
      @SwiftBook  6 ปีที่แล้ว

      Спасибо :)

  • @watching-you-
    @watching-you- 4 ปีที่แล้ว

    Отличное видео. И есть небольшой вопрос, вы захватываете self в замыкание по слабой связи. Какая вероятность, что она будет освобождена автоматически, и соответственно кеш не будет сохранять полученную картинку? Почему не использовать сильную связь?

  • @ТимурСадыков-ы9р
    @ТимурСадыков-ы9р 6 ปีที่แล้ว

    Добрый день, Иван. Хотел узнать ответы на 2 вопроса:
    1) В чём отличие данной реализации кэша от случая, если бы мы в методе в AppDelegate, срабатывающем после загрузки изображения, написали бы следующий код:
    let temporaryDirectory = NSTemporaryDirectory()
    let urlCache = URLCache(memoryCapacity: 25000000, diskCapacity: 50000000, diskPath: temporaryDirectory)
    URLCache.shared = urlCache
    2) Почему в некоторых замыканиях вы пишите [weak self], а в других, где всё равно есть обращение к self, нет?

  • @YoungDeveloper
    @YoungDeveloper 6 ปีที่แล้ว

    Спасибо Иван было очень полезно. Есть просьба запиши видео про local notification s calendarTrigerom только данные чтоб брал из массива с кастомными дата и время час и минуты, я несколько дней пытаюсь сделать ничего не получается.Если нужны данные могу придоставить готовый дикшинари

    • @SwiftBook
      @SwiftBook  6 ปีที่แล้ว +1

      Добрый день! У нас есть курс по уведомлениям, там есть работа с триггером.

    • @YoungDeveloper
      @YoungDeveloper 6 ปีที่แล้ว

      Акулов Иван да я смотрел его, только там мало информации, я делал так как вы показываете только данные беру из массива вот тогда уже не приходит уведомление

  • @АнатолийЯ-ы7т
    @АнатолийЯ-ы7т 6 ปีที่แล้ว

    то есть получается все загруженные изображения будут храниться в переменной imageCache? а если вместо NSCache использовать что-то типа [String:UIimage] ?

    • @SwiftBook
      @SwiftBook  6 ปีที่แล้ว +2

      да, но про отличия NSCache от словаря лучше пробегитесь по теме:
      NSCache objects differ from other mutable collections in a few ways:
      The NSCache class incorporates various auto-removal policies, which ensure that it does not use too much of the system’s memory. The system automatically carries out these policies if memory is needed by other applications. When invoked, these policies remove some items from the cache, minimizing its memory footprint.
      You can add, remove, and query items in the cache from different threads without having to lock the cache yourself.
      Retrieving something from an NSCache object returns an autoreleased result.
      Unlike an NSMutableDictionary object, a cache does not copy the key objects that are put into it.
      These features are necessary for the NSCache class, as the cache may decide to automatically mutate itself asynchronously behind the scenes if it is called to free up memory.
      stackoverflow.com/questions/10502809/objective-c-benefits-of-using-nscache-over-a-static-nsmutabledictionary

    • @albertchubakov7120
      @albertchubakov7120 6 ปีที่แล้ว

      зачем изобретать велосипед когда есть специальная для этого вещь? Эпл не дураки

  • @sergeybizunov6387
    @sergeybizunov6387 6 ปีที่แล้ว

    Хочу добавить от себя, был опыт использования большого количества "тяжёлых" картинок в проекте, использовали либу Kingfisher. Очень хороший инструмент, были единичные случаи "необъяснимой магии" (решилось перепиской с разработчиками + фиксом) но в целом работало всё железобетонно.

    • @BearcatsYT
      @BearcatsYT 6 ปีที่แล้ว

      У меня тоже был опыт ))) сама либа хороша , но криворукие программисты очень часто Делегируют загрузку данных ячейке, да еще и используют при этом замыкания. Пока криворукий девелопер тестирует ее без скролинга - все работает хорошо, но как только приложение попадает в продакшен к пользователю - начинается проблема замыканий внутри реюзабл ячеек ) когда по идее ячейка уже загружена новыми данными, но замыкание получает старый респонс. После этого картинки в ячейках начинают скакать )))

    • @watching-you-
      @watching-you- 4 ปีที่แล้ว

      Mikhail Kotov для этого лучше использовать Operation с дирижирующим провайдером, который будет чистить ячейки при их удалении с экрана. Имхо