앱에서의 ViewController를 관리 및 unload 할 수 있는지 궁금합니다.

2 답변 글타래를 보이고 있습니다
  • 글쓴이
    • iJoom
      참가자
      • 글작성 : 8
      • 답글작성 : 1

      뷰가 몇개 없는 간단한 앱에서는 문제가 일어나지 않을 것 같습니다. 하지만 만약 앱에서의 뎁스가 길어져서 여러 개의 뷰 컨트롤러 들이 단방향으로 진행되면, iOS의 기본적인 뷰 라이프 사이클 이외에 제가 뷰의 생명을 관리하고 제가 지정한 시점에서 뷰를 unload 시킬 수 있는지 궁금합니다.

      1->2>3->4->5->6 라는 뷰의 뎁스가 있다면 5번 뷰까지 왔다면 1~4의 뷰를 체크해 메모리에 올라와 있고 살아있는 뷰를 찾아서 메모리에서 해제 시켜줄 수 있는지 궁금합니다.

    • 멍단비
      참가자
      • 글작성 : 10
      • 답글작성 : 98

      음. 애초에 그렇게 보통 설계를 하지 않습니다. 기획이나 디자인쪽에서도 팝업창 같은것도 보통 1뎁스, 많아야 2뎁스가 일반적입니다.
      말씀하신대로 성능에 영향을 줄 수 있기 떄문이기도하고, 사용자 경험면에서도 그리 유쾌하지 않기 때문이겠죠. 찾아보진 않았지만 HIG에서도 지양하지 않을까요? 그래서 프레젠트나 내비게이션컨트롤러를 이용해서 다른 뷰컨트롤러로 이동을 하는 거구요.

      뷰를 메모리에서 해제하는 방법은 당연히 있습니다. 메모리에올라와있는지는 해당 뷰의 객체가 존재하는지를 체크해보면 될 것이고,
      메모리에서의 해제는 removeFromSuperview 를 사용하는 것으로 알고 있습니다.

      그러나 위에서 말씀드린대로 뭐,, 회원가입이라고 예를들어보면 회원가입이 완료되었다는 페이지를 보여주면 그 이전화면은 다 필요가 없잖아요?
      그래서 그런경우엔 뭐 로그인화면으로 내비게이션 컨트롤러의 pop기능을 사용해서 메모리에서 없애준다거나, 그것도 아니면 아예 루트뷰컨트롤러를 바꿔주는 방법으로 메모리에서 해제시키는 것으로 알고 있어요.
      모자라거나 틀린 부분은 다른 분들이 더 설명해주실 것 같네요^^

    • 야곰
      키 마스터
      • 글작성 : 37
      • 답글작성 : 579

      @ijoom 님 말씀이 충분히 가능합니다.
      뎁스라는 것이 모달은 그렇게 하지 않고요, 내비게이션 방식으로만 저렇게 깊은 뎁스를 만듭니다.
      기기의 메모리에 비해 너무 많은 뷰 컨트롤러가 쌓이면 문제가 될 수도 있지만 각 뷰 컨트롤러 마다 적절한 메모리 처리만 잘 해주고 있다면 여러 뷰 컨트롤러가 쌓여도 문제는 없죠.

      iJoom님은 뷰 컨트롤러가 쌓인 것을 관리할 수 있느냐 물어본 것이고, 멍단비님께서는 removeFromSuperview 메서드는 하나의 뷰 컨트롤러의 뷰에서 뷰가 쌓여있을 때 뷰를 하나씩 제거하는 방법을 말씀해주셨습니다. 살짝 핀트가 다른 이야기라고 생각되네요.
      맨 아래 문단의 내비게이션 컨트롤러 설명을 해주셨는데 pop을 해버리면 맨 마지막 뷰 컨트롤러가 빠지기 때문에 iJoom님께서 궁금했던 ‘중간의’ 뷰 컨트롤러를 빼는 방법으로는 적절치 않아보입니다.

      H.I.G.에서는 뎁스를 너무 깊게 가져가지 말라는 이야기는 못본 것 같아요. 다만, 정보의 깊이(뎁스)가 발생하는 경우 내비게이션 방식을, 잠깐의 팝업 또는 작성 폼 등의 화면을 보여주려면 모달 방식을 사용하라고 안내하고 있습니다.
      간단히 말해서 정보의 흐름에 따라서 모달을 사용할 것인지 내비게이션을 사용할 것인지 달라진다는 것입니다. 정보의 흐름이 이어지는 것이면 내비게이션, 다른 정보로의 분기 혹은 임시화면, 작성화면인 경우 모달.

      iJoom님께서 원했던 내용은 UINavigationControllerviewControllers Array 프로퍼티를 가지고 충분히 뷰 컨트롤러를 넣었다 뺐다 할 수 있습니다.

      • 이 답변은 야곰에 의해 4 years 전에 수정됐습니다.
      • 멍단비
        참가자
        • 글작성 : 10
        • 답글작성 : 98

        아아 그러네요 제가 잘못봤네요. 뷰로 봐버렸네요 ㅎㅎ 금요일이라 제정신이 아닌가봐요.

2 답변 글타래를 보이고 있습니다
  • 답변은 로그인 후 가능합니다.

logo landscape small

사업자번호 : 743-81-02195
통신판매업 신고번호 : 제 2022-충북청주-1278 호
고객센터 : 카카오톡채널 @yagom