Size: a a a

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

2020 May 01

AY

Alex Yatsenko in iOS Developers — русскоговорящее сообщество
спасибо
источник

DK

Denis Kim in iOS Developers — русскоговорящее сообщество
Александр
ну как в моем примере

есть 2 листинера и 1 диспатчер

оба листинера должны получить ивент  от диспатчера
такое делается через notificationCenter. ну или combine.
источник

А

Александр in iOS Developers — русскоговорящее сообщество
Denis Kim
такое делается через notificationCenter. ну или combine.
да! но читал что  не рекоммендуется его чрезмерно использовать
источник

DK

Denis Kim in iOS Developers — русскоговорящее сообщество
впервые слышу
источник

А

Александр in iOS Developers — русскоговорящее сообщество
NotificationCenter меня полностью устраивает кроме как невозможности указать какой тип данных прийдет
источник

А

Александр in iOS Developers — русскоговорящее сообщество
а сам смысл что подписался когда захотел.  и если надо легко отписался. - то что нравится
источник

S

Stanislav in iOS Developers — русскоговорящее сообщество
Александр
NotificationCenter меня полностью устраивает кроме как невозможности указать какой тип данных прийдет
Так напиши свой, с указанием приходящего типа
источник

А

Александр in iOS Developers — русскоговорящее сообщество
Stanislav
Так напиши свой, с указанием приходящего типа
так вот и пытался изобрести подобный механизм
источник

DK

Denis Kim in iOS Developers — русскоговорящее сообщество
зачем писать свой? в чем проблема кастить
источник

А

Александр in iOS Developers — русскоговорящее сообщество
источник

S

Stanislav in iOS Developers — русскоговорящее сообщество
Александр
да! но читал что  не рекоммендуется его чрезмерно использовать
Обычно его лепят наобум, получается лишняя зависимость и усложнение кода. Проблема только в этом
источник

А

Александр in iOS Developers — русскоговорящее сообщество
ну вот пример который я сделал
1 диспатчер
2 обсервера

оба класса должны получить евент из диспатчера
желательно чтоб все было удобно, без memory leak, легко отписаться, и поддержка типа данных которые могут прийти из ивента

насколько я понимаю
делегаты не подходят, closures тоже


есть такое решение:  
Socket {
listeners: [SocketDelegate]
func connect() {
listeners.foreach { $0.onConnection() }
}
}
socket.listeners.append(self)


и все с ним ок, кроме memory leak
забить и не парится?
начал гуглить нашлись варианты  но они безумно сложные

в итоге простая задача усложнилась стократно
источник

DK

Denis Kim in iOS Developers — русскоговорящее сообщество
потому что простое решение это нотифицейшен центр
источник

S

Stanislav in iOS Developers — русскоговорящее сообщество
Александр
ну вот пример который я сделал
1 диспатчер
2 обсервера

оба класса должны получить евент из диспатчера
желательно чтоб все было удобно, без memory leak, легко отписаться, и поддержка типа данных которые могут прийти из ивента

насколько я понимаю
делегаты не подходят, closures тоже


есть такое решение:  
Socket {
listeners: [SocketDelegate]
func connect() {
listeners.foreach { $0.onConnection() }
}
}
socket.listeners.append(self)


и все с ним ок, кроме memory leak
забить и не парится?
начал гуглить нашлись варианты  но они безумно сложные

в итоге простая задача усложнилась стократно
Почему memory leak?
источник

S

Stanislav in iOS Developers — русскоговорящее сообщество
Сделай ListenerHolder с weak ссылкой на настоящий listener да и все
источник

DK

Denis Kim in iOS Developers — русскоговорящее сообщество
если тебе хочется по каким-то причинам другое, пожалуйста - есть куча схем от target/selector как в рекогнайзерах, до rxswift
источник

S

Stanislav in iOS Developers — русскоговорящее сообщество
Или заставляй listener’ов отписываться обязательно
источник

А

Александр in iOS Developers — русскоговорящее сообщество
Stanislav
Сделай ListenerHolder с weak ссылкой на настоящий listener да и все
как ?
источник

S

Stanislav in iOS Developers — русскоговорящее сообщество
Ну, простой объект с weak полем listener
источник

S

Stanislav in iOS Developers — русскоговорящее сообщество
И его уже добавляй в массив
источник