티스토리 뷰

TIL

[TIL] 2022 / 08 / 19

희철 2022. 8. 20. 00:46

BaseViewController

 

 

여러 뷰컨트롤러에서 공통적으로 작성되는 코드를 구조화.

 

기존에는 하나의 뷰컨트롤러마다 공통되는 코드라도 매번 반복해서 작성.

 

아래처럼 BaseViewController내에 작성한 뒤, BaseViewController의 viewDidLoad에서 호출하면 상속받는 뷰컨에서 따로 호출할 필요 없음.

 

상속받는 뷰컨트롤러에서는 액션에 대한 제어만 할 수 있도록 해줌.

 

 

 

BaseView

 

 

뷰도 뷰컨트롤러와 마찬가지로 BaseView 클래스를 따로 만들어줘서 상속받는 View를 만들어서 루트뷰로 설정하면 구조화가능.

 

오른쪽 사진에서 볼 수 있듯이 상속받은 뷰 클래스에서 프로터티 선언, UI설정 등을 함.

 

단, 뷰컨트롤러에서 루트뷰로 설정할 때 loadView메서드에서 해야함.

-> viewDidLoad보다 먼저 실행됨.

 

super.loadView를 호출하면 안됨.

-> loadView는 말그대로 뷰를 로드하는 메서드임. 근데 커스텀한 뷰를 사용할때 super.loadView를 쓰게되면 부모클래스의 메서드를 실행하게돼서 커스텀한 뷰가 적용되지않아서 쓰면 안되는 것 같음. 정확하지 않음.

 

커스텀 UIView를 사용할땐 이니셜라이즈가 필수.

 

근데 오른쪽 사진을 보면 override init이 있고, required init?이 있음.

 

코드베이스 작업할땐 매개변수가 frame인 initializer를 사용, xib를 이용할땐 coder인 것 사용.

 

왜 두 개를 다 써주냐

-> 프로토콜을 채택하였기때문에 코드로 짜더라도 두 개를 전부 써줘야함.

UIView가 채택한 NSCoder에 init?이 있는 것을 볼 수 있음.

 

코드베이스인 경우에 required init이 실행되면 안되기때문에 런타임오류를 주기 위해 fatalError구문 사용

-> 즉, 코드베이스가 아니라면 지워줘야함.

 

 

 

NotificationCenter를 이용해 값 전달

 

 

데이터를 받는 쪽에서 옵저버를 이용해 NSNotification.Name의 값을 이름으로 갖는 Notification이 오면 메서드 실행.

 

post를 하기 전에 observer가 미리 메모리 상에 올라와있어야 함!!

 

또한 옵저버는 removeObserver를 통해 제거해줘야함.

-> 싱글턴이므로 다른 곳에서도 같은 인스턴스를 공유하기때문에 제거해야 하는 것 같음.

'TIL' 카테고리의 다른 글

[TIL] 2022 / 08 / 21  (0) 2022.08.22
[TIL] 2022 / 08 / 20  (0) 2022.08.21
[TIL] 2022 / 08 / 18  (0) 2022.08.18
[TIL] 2022 / 08 / 17  (0) 2022.08.17
[TIL] 2022 / 08 / 15(frame과 bounds)  (0) 2022.08.16
댓글
최근에 올라온 글
Total
Today
Yesterday