override 할 때 super 꼭 호출해야 하나요???

9 답변 글타래를 보이고 있습니다
  • 글쓴이
      • 글작성 : 2
      • 답글작성 : 4

      뷰컨에서요

      override func viewDidLoad() {
          super.viewDidLoad()
      }
      

      꼭 super.viewDidLoad() 이거 넣어줘야 하나요..??

      override func viewDidLoad() {
      }
      

      이렇게 빼도 에러는 안나더라구요?

      • 글작성 : 2
      • 답글작성 : 1

      억 죄송한데 혹시 코드 예쁘게 어떻게 넣는건가요?????

        • 글작성 : 2
        • 답글작성 : 4

        마크다운 코드블럭이 먹더라구요ㅋㅋㅋ

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

        여러줄 코드는 백틱 세개쓰고 뒤에 원하는 언어 이름 (swift 혹은 objc) 쓰고 코드 쓴다음 맨 아래에서 백틱 세개로 닫아주심 되고요
        단어 혹은 한 줄 코드는 백틱 한개로 감싸주시면 됩니다.

    • 염염
      참가자
      • 글작성 : 1
      • 답글작성 : 6

      super는 부모클래스를 의미하는데요!
      질문 내용은 오버라이딩 할 때 부모의 작업을 실행할지말지 선택하는 것이라 할 수 있겠죠.
      보통 viewDidLoad 같이 뷰 라이프 사이클은 템플릿 패턴으로 구현되어 있는데 뷰컨트롤러의 뷰가 메모리에 로드될 때, OS에 의해 호출되는 것이기 때문에 super를 붙여주시는게 좋습니다.?

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

      @염염 님이 설명 잘 해주셨는데요, 선택이 아니라 필수인 경우도 있습니다.
      super.method를 꼭 넣어줘야 하는 상황도 있고, 선택인 상황도 있다는 뜻입니다. 꼭 필요한지 아닌지는 문서에 보면 대부분 나와있습니다.

      https://developer.apple.com/documentation/appkit/nsviewcontroller/1434476-viewdidload

      문서에 가보면 Discussion 부분에 설명이 있을겁니다.

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

      네, 문서 읽는 습관 들이면 최강의 무기가 됩니다!

    • 재르시
      참가자
      • 글작성 : 0
      • 답글작성 : 4

      대표적인 예시중 하나가 loadView가 있습니다.
      If you use Interface Builder to create your views and initialize the view controller, you must not override this method.

    • 재르시
      참가자
      • 글작성 : 0
      • 답글작성 : 4

      https://realm.github.io/SwiftLint/overridden_super_call.html
      자꾸 깜빡깜빡 하신다면 이런 lint rule을 이용해보셔도 좋습니다.

    • ClintJang
      참가자
      • 글작성 : 1
      • 답글작성 : 8

      좋은 내용!! 잘 읽고 갑니다. ?‍

    • 현우
      참가자
      • 글작성 : 0
      • 답글작성 : 1

      배우고갑니다 👍

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

      저도 초보라 자세하게 이해할정도로는 설명을 못드릴 것 같아요. 다만 간단하게라도 아는 내용이라면 이렇습니다.

      super라는게 어쨋건 부모클래스의 메소드를 사용하겠다는거잖아요.
      우리는 UIViewController클래스를 상속해서 쓰고있고 거기에있는 viewdidload메소드를 오버라이드(재정의)해서 써요.
      근데 이제 말그대로 뷰가로드되고 났을때, 우리는 알수없는 UIViewController에서 뷰를 만들때 하는 여러 설정들을 ‘마무리’해주는 작업이 필요하다고 해요.
      그래서 super.viewdidload()를 해줘서 어떤 기초적인 설정들을 ‘마무리’해주는 작업을 하고 그 이후에 우리는 우리가 하고싶은 어떤 작업들을 하죠.
      만약에 super.viewdidload()를 맨 밑에 적고, 그 사이에 어떤 작업들을 해주게되면 아직 뷰디드로드의 설정이 끝나지않은 상태에서 어떤 작업들이 이루어지므로
      이상한 버그와 동작이 발생할 수 있는 것으로 알고있어요. 물론 그것을 제외하더라도 대충 찾아보면 습관적으로 꼭 호출하도록 하라고는 하더군요.

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

logo landscape small

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