Skip to content

[Fix] #511 - 솝트로그 화면 전환 수정 및 메모리 최적화 #512

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 5 commits into from
Mar 25, 2025

Conversation

dlwogus0128
Copy link
Contributor

@dlwogus0128 dlwogus0128 commented Mar 7, 2025

🌴 PR 요약

솝트로그가 탭바 인덱스로만 전환될 수 있도록 수정하고, 누수가 발생하는 부분을 수정합니다.

🌱 작업한 브랜치

🌱 PR Point

✅ 솝트로그 -> 탭바로 전환될 수 있도록

기능 스크린샷
AS-IS
Simulator.Screen.Recording.-.iPhone.16.Pro.Max.-.2025-03-06.at.21.53.27.mp4
  • 위와 같이, 탭바 아이템을 누르지 않으면 솝트로그 페이지가 새롭게 push되는 문제가 발생했습니다.

AS-IS

// runHomeFlow()
 case .soptlog:
        self?.runSoptlogFlow()
  • 그 이유는 runHomeFlow() 내에서 새롭게 솝트로그 플로우를 부르며, 솝트로그 코디네이터를 재생성하고 있었기 때문인데요.
스크린샷 2025-03-07 오후 3 29 12
  • 이렇게 ApplicationCoor 내에서 홈과 솝트로그 플로우를 생성하는 기존 방식은 해당 Coor들이 제거되지 않고 메모리에 남아있어 누수의 원인이 되기도 했습니다.

TO-BE

private weak var tabBarController: UITabBarController?
private weak var homeCoordinator: HomeCoordinator?
private weak var soptlogCoordinator: SoptlogCoordinator?
  • 그래서 위와 같이, 탭바의 VC와 홈, 솝트로그의 Coor들을 Applicaion Coor 내에서 하나로 공유될 수 있도록 수정했습니다.

✅ 솝마디 메모리 최적화

첫번째 시도

스크린샷 2025-03-07 오후 6 03 36
  • 또한 기존에 솝마디에서 홈으로 돌아가기 버튼을 눌렀을 때, 솝마디 관련 객체들이 메모리에 계속 남아있는 문제를 발견했는데요.
  • "홈으로 돌아가기"의 기존 구현 방식은, ApplicationCoor까지 리프 Coor에서 클로저로 dismiss 요청을 전달하고 ApplicationCoor에서 딥링크로 "home"에 보내주는 방식이었습니다.
  • router의 popToRootModule을 사용하지 않고 이렇게 구현한 이유는, 솝마디를 띄워주는 router의 root가 다른 경우가 있어서였습니다. (푸시 알림 목록에서 솝마디를 띄워줄 경우 문제가 발생합니다.)
  • 따라서 딥링크를 통해 home으로의 전환을 시도하고 있었는데, 탭바가 생기면서 home의 새로운 플로우를 생성할 경우 메모리에 계속해서 Coor가 쌓이는 문제가 발생하고 있었습니다.
/// ApplicationCoor - runDailySoptuneFlow()
coordinator.requestCoordinating = { [weak self, weak coordinator] in
    self?.router.popToRootModule(animated: true)
    coordinator?.childCoordinators = []
}
  • 이에 대한 해결방안으로, 기존 "ApplicationCoor까지 리프 Coor에서 클로저로 dismiss 요청을 전달"을 할 때 finishFlow를 부르는 것과 같이 해당 모듈을 dismiss시키고, ApplicationCoor에 도달하면 popToRootModule로 탭바까지 pop되어 기존에 존재하던 홈에 도달할 수 있도록 구현했습니다.

두번째 시도

스크린샷 2025-03-07 오후 5 06 13
  • 두번째로 발견한 것은 DailySoptuneResult 부분에서의 순환 참조 문제였습니다.

AS-IS

// DailySoptuneResultCoor

dailySoptuneResult.vm.onKokButtonTapped = { [weak self] userModel in
    guard let self else { return .empty() }
    return self.showMessageBottomSheet(userModel: userModel, on: dailySoptuneResult.vc.viewController)
}
  • 이는 기존에 showMessageBottomSheet에서 self의 vc를 강하게 참조하고 있어 메모리에서 해제되지 못하고 있었던 문제였습니다.

TO-BE

// DailySoptuneResultCoor
private weak var viewController: UIViewController?

dailySoptuneResult.vm.onKokButtonTapped = { [weak self] userModel in
    guard let self else { return .empty() }
    return self.showMessageBottomSheet(userModel: userModel, on: self.viewController)
}

viewController = dailySoptuneResult.vc.viewController
  • 따라서 해당 vc를 약하게 참조할 수 있도록 해결했습니다.

📌 참고 사항

📸 스크린샷

생략

📮 관련 이슈

@dlwogus0128 dlwogus0128 added Fix 문제 해결, 코드 수정 재현✦ labels Mar 7, 2025
@dlwogus0128 dlwogus0128 self-assigned this Mar 7, 2025
Copy link

height bot commented Mar 7, 2025

Link Height tasks by mentioning a task ID in the pull request title or commit messages, or description and comments with the keyword link (e.g. "Link T-123").

💡Tip: You can also use "Close T-X" to automatically close a task when the pull request is merged.

Copy link
Contributor

@meltsplit meltsplit left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

xcode 도구 사용하는 것 좋네요~ 나중에 저도 알려주세요~

Q. [두번째 시도] 순환참조 메모리 그래프 사진에서 진한회색과 옅은회색 화살표는 무슨 차이인가요??

@dlwogus0128
Copy link
Contributor Author

네 좋아요 다음에 같이 공부해요~~~~👀
진한 화살표는 강한 참조, 연한 화살표는 약한 참조입니다!!

@dlwogus0128 dlwogus0128 merged commit 012858e into develop Mar 25, 2025
@dlwogus0128 dlwogus0128 deleted the fix/#511-soptlog-and-pokeonboarding branch March 25, 2025 07:22
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Fix 문제 해결, 코드 수정 size/M 재현✦
Projects
None yet
Development

Successfully merging this pull request may close these issues.

[Fix] 솝트로그 화면 전환 수정 및 메모리 최적화
2 participants