Size: a a a

iOS Developers — русскоговорящее сообщество

2021 May 05

AP

Aleksandr Poddubny in iOS Developers — русскоговорящее сообщество
Божечки, смотрю на SwiftUI и отчаиваюсь. 11 лет назад забросив казалось умирающий php взялся за мобилки. На той неделе пробовал пет проект, вообще еле понимаю. Я постарел и надо менять сферу или через силу все таки учить это чудо?( в работе последней свифт только завезли, хотя с релиза с ним плюс минус
источник

g

g01dt00th in iOS Developers — русскоговорящее сообщество
мозгу нужно время, чтобы перестоиться на нативную реактивщину
источник

AP

Aleksandr Poddubny in iOS Developers — русскоговорящее сообщество
Да реактивщину поглотил ещё до Свифта. И во всякие scala умел, и промизы на ноде. Но вот свифтюи вообще еле даётся.
источник

g

g01dt00th in iOS Developers — русскоговорящее сообщество
странно, он сам по себе проще некуда
источник

AP

Aleksandr Poddubny in iOS Developers — русскоговорящее сообщество
Хотя пару лет назад за две недели Rust осилил. Хотя это тот ещё брейншторм
источник

DK

Denis Koval in iOS Developers — русскоговорящее сообщество
swiftUi вроде легкий
источник

AP

Aleksandr Poddubny in iOS Developers — русскоговорящее сообщество
Хотя у меня даже был микс ComponentKit с rxswift mvvm в своё время, напомнило больше всего это, но на нормальных нативных рельсах
источник

AP

Aleksandr Poddubny in iOS Developers — русскоговорящее сообщество
Наверное, действительно, нужно время и упорство
источник

K

Kasem in iOS Developers — русскоговорящее сообщество
Ребят, на маке каждый день работал. И вдруг пароль перестал подходить. Какого фига?
источник

KK

Konstantin Kolosov in iOS Developers — русскоговорящее сообщество
Добрый день
«Внезапно» заметил, что NotificationCenter вызывает довольно болезненные утечки на уровне 50 мб за посещение сцены, из всего, что удалось накопать, unowned и weak в замыкании проблему не решило
Unowned ожидаемо приводит к крашу при получении поста из асинхронного потока, если сцена уже deallocated, а weak приводит к Жору процессора до 100% и при этом освобождению не всей памяти.
Что я делаю не так? Может есть статейка хорошая, где все это нормально расписано?
источник

IG

Ivan Gaydamakin in iOS Developers — русскоговорящее сообщество
Нужен кол проблемного места
источник

KK

Konstantin Kolosov in iOS Developers — русскоговорящее сообщество
@MeGaPk
Для удобства оставил один вызов Notification Center
Сценарий 1:
NotificationCenter.default.addObserver(self, selector: #selector(userAvatarLoaded), name: .userAvatarLoaded, object: nil)

Результат: не освобождённые 50 мб оперативки, dealloc не вызывается

Сценарий 2:
NotificationCenter.default.addObserver(forName: .userAvatarLoaded, object: nil, queue: .main) { [unowned self] _ in
           userAvatarLoaded()
       }

Результат: оперативная память освобождается - 1-2 мб, приложение падает после вызова уже запущенным асинхронным потоком

Сценарий 3:
NotificationCenter.default.addObserver(forName: .userAvatarLoaded, object: nil, queue: .main) { [weak self] _ in
           self?.userAvatarLoaded()
       }

Результат: оперативка освобождается +- 70-80%, использование процессора поднимается до 100%

Связанный с закрытием сцены код:
deinit {
   NotificationCenter.default.removeObserver(self)
}
   
override func viewDidDisappear(_ animated: Bool) {
   NotificationCenter.default.removeObserver(self)
   super.viewDidDisappear(animated)
}
источник

IG

Ivan Gaydamakin in iOS Developers — русскоговорящее сообщество
Без нотифок все деаллокается?
источник

KK

Konstantin Kolosov in iOS Developers — русскоговорящее сообщество
@MeGaPk если не подписываться? Да, все работает хорошо, память освобождается
источник

IG

Ivan Gaydamakin in iOS Developers — русскоговорящее сообщество
Странно, могу позже глянуть удаленно чо по чом
источник

KK

Konstantin Kolosov in iOS Developers — русскоговорящее сообщество
@MeGaPk к сожалению, проект под nda, я надеялся что не один с такой проблемой и все же что-то упустил, но судя по всему все же нет. Что же, это повод переходить на combine, судя по всему
источник

IG

Ivan Gaydamakin in iOS Developers — русскоговорящее сообщество
Нет))) тут в чем то другом проблема. Что делается в методе загрузки юзера? На девайсе тестировка проходит?
источник

SV

Sergey Vanichkin in iOS Developers — русскоговорящее сообщество
ты проверь что у тебя deinit вызывается
источник

KK

Konstantin Kolosov in iOS Developers — русскоговорящее сообщество
@sergey_vanichkin да, вызывается, проверял.
@MeGaPk перезагружается таблица в основном потоке через DQ
источник

SV

Sergey Vanichkin in iOS Developers — русскоговорящее сообщество
а в методе где делаешь подписку NotificationCenter.default.addObserver сделай перед ней removeObserver
источник