ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • <Swift> Delegate 활용
    iOS/개념정리 2022. 2. 21. 15:35

    앞에 글에 이은 활용 입니다.

     

    https://ios-dev-tech.tistory.com/7

     

    <Swift> Delegate

    Delegate란  Delegation은 상속만큼 재사용을위한 구성을 강력하게 만드는 방법입니다. Delegation에서 요청을 처리하는 데 두 가지 개체가 포함됩니다. 받는 개체(receiving object)는 작업을 대리자(delegate)

    ios-dev-tech.tistory.com

     

    이번엔 기존에 있던 delegate를 쓰지 않고 만들어서 delegate 패턴을 사용해 보겠습니다.

     

    Delegate 활용

     

    저번 글에 사용했던 UITextFieldDelegate는  protocol 입니다.

    이제 저희 는 protocal을 만들어서 사용해 보겠습니다.

     

    ViewController에 protocol을 추가합니다.

     

    protocol 추가

    다음은 또 다른 ViewController를 만들어 줍니다.

    저는 SecondViewController로 만들었습니다.

    SecondViewController

    이제 만든 ViewController을 swift 파일에 연결해 줍니다.

    연결

    이제 처음에 protocol를 생성했던 ViewController에 TestDelegate를 채택해 줍니다.

     

    TestDelegate 채택

    이제 채택 작업을 했으니 위임구현 과정이 남아있습니다.

     

    먼져 채택 작업을 하고 나면 빨간불이 들어옵니다.

    에러

    위 내용은 작성한 TestDelegate 프로토콜 규약을 지키기 위해서 작성할 함수를 작성하라는 뜻입니다.

     

    구현

    함수를 간단하게 구현하여 작성합니다.

     

    이제 위임 과정만 남았습니다.

    ViewController

     

    ViewController Button에 대한 Action

    Button을 클릭시에 위임하는 로직힙니다.

     

    다음은 SecondViewController에 구현한 함수를 호출 해 줍니다.

     

    호출

    위에 delegate를 보시면 왜 delegate를 weak로 선언하는지가 중요합니다.

    지금 현재 ViewController와 SecondViewController는 서로를 참조하고 있습니다. (OtherViewController는 예시 입니다.)

    이렇게 서로 참조하고 있기 때문에 weak가 아닌 strong을 사용하게 되면 만약 OtherViewController가 nil일 경우에 

    SecondViewController와 OtherViewController 연결이 끊어 지면서 ViewController와 SecondViewController의 연결은 영원히 남게 됩니다.

     

    한마디로 delegate가 retain(유지)되기 때문에 메모리 누수를 막기 위해서 weak를 사용합니다.

     

    이제 본론으로 와서 실행 결과 입니다.

     

    버튼 클릭시 아래 로그를 보시면 됩니다.

    실행 로그

     

    'iOS > 개념정리' 카테고리의 다른 글

    <Swift> 코드 컨벤션  (0) 2022.03.05
    <Swift> Properties  (0) 2022.02.22
    [Swift] 고차함수  (1) 2022.02.17
    <Swift> Delegate  (1) 2022.01.25
    <Swift> Firebase 연동  (0) 2022.01.25

    댓글

Designed by Tistory.