Я использую шаблон Redux для создания приложения для обмена сообщениями. Пока все работает нормально, но затем я замечаю утечку памяти в некоторых частях приложения, которую я не могу решить. Контроллер моего представления, который привязывается к издателю сообщений. Deinit не будет вызываться при закрытии контроллера представления.
let messages = {
store.$state
.map { $0.chatState.messagesByChannel[self.channelId] }
.removeDuplicates()
.eraseToAnyPublisher()
}()
messages.combineLatest(Just("Hello world"))
.sink { [weak self] (messages, state) in
}
.store(in: &cancellableSet)
Когда я перешел со ссылки на объект словаря на другой объект в состоянии чата, вызывается deinit
let chatRoomDetailResponse = {
store.$state
.map { $0.chatState.getChatRoomDetailResponse }
.removeDuplicates()
.eraseToAnyPublisher()
}()
chatRoomDetailResponse.combineLatest(Just("Hello world"))
.sink { [weak self] (messages, state) in
}
.store(in: &cancellableSet)
Это небольшой снимок моего магазина:
final public class Store<State: FluxState>: ObservableObject {
@Published public var state: State
private var dispatchFunction: DispatchFunction!
private let reducer: Reducer<State>
и мой ChatState:
public struct ChatState: FluxState {
public typealias ChannelID = String
public var messagesByChannel: [ChannelID: [Message]] = [:]
public var getChatRoomDetailResponse: NetworkResponse<ChatChannel>? = nil
}