[iOS] iOS 및 Swift 기초

iOS 및 Swift 기초

ARC

ARC의 동작 원리

ARC의 동작 시점

Frame과 Bounds의 차이는 무엇인가요?

Frame

Bounds

Autolayout이란?

뷰에 주어진 제약조건에 따라(뷰들 간의 관계를 ) 뷰의 크기와 위치를 동적으로 계산해 배치하는 것으로, 외부 또는 내부의 변화에 동적으로 반응하여 유저 인터페이스를 구성합니다.

Autolayout Constraint의 Priority의 개념이 무엇이고, 어떤 상황에 사용하나요?

말그대로 제약들간의 우선순위를 말한다.

다수의 뷰들에 여러 제약이 걸려있을 때, 보통은 제약간의 충돌이 일어나지 않게끔 제약들을 설계하는게 일반적이지만, 상황에 따라서는 뷰들의 크기가 유동적으로 변하는 경우가 있는데, 이럴때 어떤 제약들이 서로간에 충돌이 일어나는 경우가 있을 수 있다.

이럴때에는 어떤 제약의 우선순위를 더 우위에 둘것이냐를 결정해서 이러한 충돌을 해결할 수 있다.

UICollectionViewLayout 클래스에 prepare 메소드는 어떤 역할을 하나요?

레이아웃관련 연산이 일어날 때마다 가장 먼저 호출된다. 이 메소드에서 셀의 위치/크기 등을 계산하기 위한 사전 처리를 할 수 있다.

UICollectionViewLayout을 상속받아 Custom한 CollectionViewLayout을 구성하고자 할때, 데이터소스를 참조하여 셀의 위치 및 크기를 미리 계산하여 캐싱해두고, CollectionView로 부터 셀의 위치 및 크기 요청이 들어올때, 미리 계산하여 캐싱해둔 데이터를 전달해주는 방식으로 커스텀 레이아웃을 구성하는 방식이 있겠다.

UITableView를 구성할때 셀의 컨텐츠에 따라 높이를 설정하고 싶다면 어떻게 해야하나요?

델리게이트 메서드 rowHeight에서는 UITableView.automaticDimension 값을 리턴하고, estimatedRowHeight에서는 셀의 예측 높이값을 리턴한다. 이렇게 하면 오토레이아웃 테이블뷰 셀 구현이 가능하다. 마찬가지로 테이블뷰 셀은, 고정 높이가 아닌, 셀 안의 서브뷰들의 제약 구성으로 셀의 크기가 결정될 수 있도록 해야한다.

Delgate 장점

객체의 행동을 단순화하면서 객체 간의 결합성을 최소화시키는데 있습니다.

ViewController의 생명주기

viewLifeCycle

loadView

viewDidLoad

viewWillAppear

viewWillLayoutSubviews

viewDidLayoutSubview

viewDidAppear

viewWillDisAppear

viewDidDisappear

weak와 strong에 대한 설명

Escaping Closure의 개념

메소드 파라미터로 전달 받은 closure를 메소드의 라이프 사이클 내에서 실행하여 끝내지 않고, 메소드 scope의 외부에 전달하려 할 때는 해당 closure를 escaping 해야한다. 해당 메소드의 호출이 끝난 이후에도 closure는 메모리 어딘가에 저장되어야 하며, 이는 closure 안에서 사용된 outer object(self와 같은)에 weak와 같은 레퍼런스 타입을 사용해야 할 수 있음을 주의 하도록 한다. escaping이 명시되어 있지 않으면 기본적으로 non-escaping이며, 이는 메소드의 실행이 끝나기 전에 closure의 사용이 모두 완료됨을 보장한다. 따라서 closure 내에서 weak를 굳이 사용하지 않아도 안전할 수 있음을 의미하기도 한다.

타입 캐스팅을 할 때 사용하는 키워드인 as, as?, as! 이 셋의 차이는 무엇인가요?

Swift에서 Class와 struct의 차이는 무엇인가요?

Class-Referentce type

Struct-Value type

고차함수 (Map, Reduce, Filter)에 대해

Swift에서 함수는 일급 시민으로 취급되기 때문에 다른 함수의 전달인자로 사용될 수 있다. 고차 함수란 매개 변수로 함수를 받는 함수를 말한다.

filter1 filter2

reduce2

map, filter, reduce vs for in loop 비교 https://www.skoumal.com/en/performance-of-built-in-higher-order-functions-map-filter-reduce-and-flatmap-vs-for-in-loop-in-swift/