안녕하세요. 피더입니다.


오늘은 Extension과 Override에 대해 알아보도록 하겠습니다.



Extension 이란

Extension은 구조체, 클래스, 열거형, 프로토콜 타입에 새로운 기능을 추가할 수 있는 기능입니다. 클래스 상속과는 다르게 수직 확장이 아닌 수평 확장으로 타입에 기능을 추가

합니다.



위에 애플 가이드에서 "Extension은 타입에 새로운 기능을 추가할 수 있지만, 기존에 존재하는 기능을 Override 할 수 없다." 라고 하고 있습니다.

하지만 현재 개발을 하면서 Extension을 통해 Override 가 사용 가능합니다.



위에 소스코드에서 Extension 에서 shouldAutorotate 라는 변수와 viewDidLoad 라는 메소드를 Override 하고 있고, 에러가 발생하지 않고 있습니다.

이러한 일이 가능한 이유는 컴파일러가 Objective-C와의 호환성을 위해 Extension에서 Override를 허용하기 때문입니다. 즉, 메소드가 Objective-C와 호환되는 경우에만

확장에서 메소드 Override 할 수 있습니다.


Extension을 통한 Method Swizzling 또한 가능합니다. load() 및 initialize() 를 override 하여 원하는 메소드를 실행시킬 수 있습니다.


 애플에서 Extension은 기능의 추가를 위해 사용하라고 하니 Extension에서 Override는 지양합시다...



참고


'iOS Development' 카테고리의 다른 글

Layout Update 이해하기  (2) 2017.12.05


안녕하세요. 피더입니다.


오늘은 Layout Update에 대해 알아보도록 하겠습니다.




Update Cycle

업데이트 주기는 앱이 모든 이벤트 처리 코드를 실행 한 후 컨트롤이 기본 실행 루프로 돌아오는 지점입니다.



UIView

  • layoutSubviews()

뷰 및 모든 하위 뷰의 크기와 위치를 업데이트합니다. 이 메소드를 직접 호출하면 안됩니다.


  • setNeedsLayout()

시스템이 다음 업데이트 주기에 해당 뷰에서 layoutSubviews를 호출하여 업데이트합니다.


  • layoutIfNeeded()

시스템이 업데이트가 필요한 경우 즉시 layoutSubviews를 호출합니다.




Display

  • draw(_:)

layoutSubviews 처럼 뷰의 크기와 위치를 업데이트합니다. layoutSubviews는 하위 뷰의 layoutSubvies를 호출하지만 draw는 해당 뷰만 호출됩니다.

이 메소드를 직접 호출하면 안됩니다.


  • setNeedDisplay()

setNeedLayout과 비슷합니다. 뷰를 실제로 다시 그리기 전에 반환하는 내부 플래그를 설정하고 다음 업데이트 주기에 draw를 호출합니다.




Constraints

  • updateConstraints()

layoutSubviews 또는 draw 와 비슷합니다.


  • setNeedsUpdateConstraints()

시스템이 다음 업데이트 주기에 updateConstraints를 호출하여 제약조건을 업데이트합니다.


  • updateConstraintsIfNeeded()

layoutIfNeeded와 비슷합니다. 업데이트 플래그를 확인하여 업데이트가 필요할 경우 즉시 업데이트합니다.





'iOS Development' 카테고리의 다른 글

Extension 에서 Override 하기  (1) 2017.12.08

+ Recent posts