iOS/Interview Questions

1. heap보다는 stack에 메모리를 할당 class보단 struct나 enum을 사용한다. class는 heap할당, struct나 enum은 stack할당이므로 메모리 할당 class: heap struct: stack enum: stack heap ⇒ 메모리 할당을 사용하지 않은 영역을 찾아 할당하는 방식(동적할당)이므로 좀 복잡함 (속도가 느림) stack ⇒ LIFO 방식이므로 메모리 구조가 단순함 (속도가 빠름, O(1)) 2. 정적 디스패치(static Dispatch)를 지향 일반적으로 swift에서는 dynamic dispatch를 사용하도록 되어있음 클래스(메서드, 프로퍼티)를 선언할 때 상속되지 않는 클래스에 final을 붙이면 성능이 향상됨 클래스는 dynamic dispatch..
struct 값 타입 (데이터를 전달할 때 값을 복사하여 전달) 상속 불가 메모리에서 자동제거 ⇒ 함수 종료(지역변수, 매개변수), 프로그램 종료(static, 전역변수) 인스턴스 상수로 선언시 저장속성 전부 상수로 선언 메서드 내에서 속성 변경 불가능 소멸자 없음 class 참조 타입 (데이터를 전달할 때 값의 메모리 위치를 전달) 상속 가능 ARC로 메모리 관리 인스턴스 상수로 선언해도 가르키는 let/ var 선언에 따름 메서드 내에서 속성 변경 가능 소멸자 있음 객체 대신 인스턴스라는 용어 사용 enum 한정된 사례(case) 안에서 정의할 수 있는 타입 (요일, 성별 ..) 케이스가 선택가능한 가짓 수로 정해져 있을 때 정의 ⇒ 다른것 넣으면 타입 에러 상속 불가능 공통점 개발자가 마음대로 만들..
foreground상태 앱이 실행되어 사용자가 앱을 보고 있는 상태 background상태 앱이 실행되어 있지만 사용자가 앱을 보고 있지는 않은 상태 (ex. 음악 재생 중 다른 화면으로 전환) ** background 상태라고 해도 앱이 실행 중이지 않은건 아니다. foreground에 있을 때에는.. 메모리 및 기타 시스템 리소스에 대해서 background보다 높은 우선순위를 가지며 시스템은 이러한 리소스를 사용할 수 있도록 필요에 따라 background 앱을 종료한다. background에 있을 때에는 가능한 적은 메모리공간을 사용해야하며(시스템 리소스 해제, 메모리에서 해제 후 데이터를 디스크에 작성) 우선순위에 의해 foreground task보다 더 낮은 자원을 할당 받는다. 출처: htt..
@main은 프로그램 실행 시작 시 진입점으로 타입을 지정하기 위한 Swift 언어의 기능이다. 사용자는 탑 레벨의 코드를 작성하는 대신 @main단일 유형의 속성을 사용할 수 있고, 라이브러리와 프레임워크는 프로토콜이나 클래스 상속을 통해 맞춤형 진입점 동작을 제공할 수 있다. ** AppDelegate에서 볼 수 있다. @main vs @UIApplicationMain 1. 구조체에서 @main 대신 @UIApplicationMain를 쓴다면 class 선언에만 사용이 가능하다는 오류가 발생! 2. @UIApplicationMain 대신 @main을 사용함으로 타입 기반의 스위프트 코드에서 이상적인 진입점을 알려주며 main() 함수는 일반 정적 메서드이므로 프로토콜에서 확장 메서드 또는 기본 클래스..
UIApplication 싱글턴 객체가 생성됨 UIApplication이란? iOS에서 실행되는 앱의 중앙 집중 제어 및 조정 지점 1. 앱 시작 -> UIApplicationMain()호출 -> 싱글톤 UIApplication 객체 생성 -> shared클래스 메소드 호출 -> 객체에 접근 => 앱 시작하면 UIApplicationMain()이 shared app instance를 만든다. 참고 https://github.com/jwonyLee/TIL/blob/master/iOS/Interview/UIApplicationMain.md https://jinshine.github.io/2018/05/28/iOS/%EC%95%B1%EC%9D%98%20%EC%83%9D%EB%AA%85%EC%A3%BC%EA%B..
App thinning 🤪 앱스토어와 운영체제가 디바이스에 애플리케이션이 설치될때, 앱이 디바이스에 맞게 설치되도록 하는 설치 최적화 기술을 의미한다. 최소한의 디스크 사용과 빠른 다운로드가 가능하다. => 더 빠른 다운로드와 더 많은 공간으로 더 나은 사용자 경험을 제공한다. 종류 🙂 1. Slicing 앱이 지원하는 여러 디바이스에 대해 각각 조각 애플리케이션 번들을 생성하고, 해당 디바이스에 가장 적합한 조각을 전달하는 기술이다. 개발자가 App store connect에 업로드하면, 앱 스토어에서 디바이스 특성에 따라 다양한 버전의 조각들을 생성한다. 그리고 사용자가 그 조각 중에서 가장 알맞은 조각(app variant)을 다운로드 받는 것이다. 사진과 같이 여러 조각으로 나뉜 번들을 필요한 것..
UIViewController UIKit 앱의 뷰 계층 구조를 관리하는 객체 화면 하나를 관리하는 단위 모든 앱은 기본적으로 하나 이상의 뷰 컨트롤러를 가지고 있음 어떤역할?🤔 뷰의 계층을 관리하면서 데이터를 화면에 어떻게 뿌릴지 관리하는 매개체 역할! 뷰에 대한 리소스를 관리함 (이미지, 음성, 진동, 메모리와 같은 리소스) 화면 사이즈, 화면 회전에 대한 대응을 함 => 요런 여러가지 기능을 하기 때문에 ViewController의 역할이 많아지면서 디자인패턴들 사용 (Model, View, ViewController) 뷰는 동작 화면에서는 Storyboard로 구성한 화면만 보이지만, 실제로는 사진과 같은 구조로 많은 층으로 쌓여있다. UIWindowScene -> UIWindow -> UITran..
UserDefaults 애플에서 기본 제공됨 key-value 쌍으로 저장하는 인터페이스 런타인 환경에서만 동작하면서 앱이 실행되는 동안 기본저장소에 접근해 데이터를 기록하고 가져오는 역할을 함 대용량의 데이터보다 단일 데이터(ex 사용자 기본 설정, 로그인 여부 등)를 저장하는데 더 적합 싱글톤 패턴으로 설계되어 앱 전체에 단 하나의 인스턴스만 존재 CoreData 애플에서 기본 제공됨 UserDefaults와 비교하여 좀 더 방대하고 복잡한 데이터를 저장하는데 적합 Data Model을 생성한 후 Entity를 생성한다. SQLite 애플에서 기본 제공되는것이 아닌 외부 라이브러리이며, 비교적 가벼운 데이터 처리가 필요할때 적합 CoreData는 프레임워크인것에 반해 SQLite는 데이터 베이스임 C..
hilily
'iOS/Interview Questions' 카테고리의 글 목록