required init?(coder: NSCoder), init 마지막

2023. 1. 3. 13:23iOS

[https://jeonyeohun.tistory.com/359]를 재해석한 포스팅입니다.

CustomView는 두 종류의 생성자가 있죠.

 

1. 여기서 NSCoder란 뭘까요?

추상클래스이며, 객체가 다른 객체를 아카이빙(=압축) 또는 분배할 수 있도록 합니다.

Objective-C 및 Swift의 객체 및 기타 값을 인코딩 및 디코딩하는 Foundation 프레임워크의 클래스
데이터를 영구 형식으로 저장하고 나중에 다시 만드는 데 사용
데이터를 파일에 저장하거나 네트워크 연결을 통해 데이터를 전송하는 데 사용(encoding ↔️ decoding)
개체 및 개체가 참조하는 모든 개체에 대한 데이터를 포함하는 파일을 만드는 프로세스인 개체 보관 프로세스에서도 사용

 

 

2. 즉 요약하자면

 

NSCoder는 인터페이스이며, 이를 구현하는 서브클래스는
어떤 객체를 메모리와 다른 데이터 포맷 사이에서 전환이 가능!
아카이빙과 디스트리뷰션을 통해 가능!

 

✅ Archiving 객체와 데이터를 디스크에 저장하는 것!

     Distribution은 객체와 데이터를 서로 다른 프로세스나 스레드사이에서 복사하는 것!

 

 

 

3. 아카이빙과 직렬화

Archives and Serializations

➡️ 계층을 이루고 있는 데이터를 바이트 스트림으로 만들 수 있는 방법

➡️ Nib은 사용자 인터페이스에 대한 복잡한 객체들의 관계를 파일로 표현하고, plist 파일도 어떤 객체에 대한 값의 목록들을 파일로 저장

 

 

Archives

➡️ 아카이브를 데이터 모델의 저장수단으로 사용하면 따로 저장을 위한 포맷팅을 필요없음, 언아카이빙을 하면 그대로 사용할 수 있음.

 

Serializations

➡️ Serialization은 값 객체들을 더 간단하게 저장할 수 있는 방법, 딕셔너리, 배열, 문자열, 바이너리 데이터들을 계층 관계로 저장

 

 

 

4. 첫 이미지

첫 이미지로 돌아가서, coder 란?
스토리보드나 nib 파일을 통해 뷰를 로드하면서 커스텀하게 초기화를 해주고 싶다면 사용

스토리보드나 xib는 객체 그래프가 아카이빙된 파일이고, 이 파일을 로드해주어야 뷰를 보여줄 수 있음.
     그리고 이때 불리는 생성자가 
required init?(coder: NSCoder)

 

 

 

5. awakeFromNib

객체 그래프에 있던 객체들이 언아카이빙 되고 시작되는 순서가 아카이빙된 순서와 같다는 것이 보장되지 않음.

➡️ 그래서 init 메서드에서 다른 객체에게 메시지를 보내는 행동은 절대 하면 안됨.

➡️ awakeFromNib은 모든 객체가 초기화된 이후에 호출되기 때문에 안전.

'iOS' 카테고리의 다른 글

ㅜㄷㅌㅅ  (0) 2023.01.22
https://velog.io/@eddy_song/stack-view  (0) 2023.01.07
Then  (0) 2023.01.06
UIView.init()를 알아보자.  (0) 2023.01.02
1월 1일, convenience init은 왜 무한루프일까?  (0) 2023.01.01