clyne의 개발 기록
iOS 면접 질문들... 본문
* 본 포스팅은, 본인이 면접을 대비하기 위해 임시로 작성한 포스팅입니다.
1. ARC란 무엇입니까? (대비: GC 가비지 컬렉션)
l 의미
n Automatic Reference Counting 의 약자
n 메모리 관리 방식을 의미 (힙 영역)
n 레퍼런스 카운트가 0이 될 때만 메모리에서 해제하는 방식
n 컴파일 시점에 동작하기 때문에, 인스턴스가 언제 메모리에서 해제될 지 예측이 가능하다. (해제시점이 정해져있음)
n 따라서, 메모리 관리를 위한 시스템 자원이 추가로 필요하지 않음.
l 단점
n ARC 작동 원리를 모르고 사용하면, 순환참조로 인하여 인스턴스가 메모리에서 영원히 해제되지 않을 수 있음.
l 참고로, 2011이전 ObjC는 MRC를 사용함 (Manual)
2. Strong과 weak, unowned 참조에 대해서
l Strong (강한참조)
n 객체를 소유하여 레퍼런스 카운트가 증가하는 프로퍼티. 값 지정 시점에 retain이 되고, 참조가 종료되는 시점에 release됨.
n ARC로 인한 메모리 해제를 피하고, 객체를 안전하게 사용하고자 할 때 사용
l Weak (약한참조)
n 객체를 소유하지 않고, 주소값만을 가지고 있는 포인터의 개념
n 값 지정시 리테인이 발생하지 않음. ( = 릴리즈도 발생하지 않음)
n 메모리서 해제되면 자동으로 nil로 초기화 되므로, 항상 옵셔널 타입임.
l Unowned (미소유 참조)
n Weak과 비슷함. 그러나, ARC에 의해 메모리에서 해제되어도, 해당 객체값을 존재하는 것으로 인지함 => non-optional 타입임 (런타임 에러 발생 주의)
3. Escaping Closure
n 메서드 라이프사이클 내에서 실행하여 끝내지 않고, 외부에 전달할 때 사용
n 메서드가 끝나도, closure는 메모리 어딘가에 저장되며, 클로져 내부에 외부객체 (self 등)에 weak과 같은 참조타입을 사용해서, 메모리릭이 생기지 않도록 주의
n Escaping이 명시되어있지 않으면, 기본적으로 non-escaping이므로, 이는, 메서드의 실행이 끝나기 전에 closure사용이 모두 완료됨을 뜻하기 때문에, 굳이 weak 프로퍼티를 사용하지 않아도 된다.
l
4. Class 와 Struct의 차이
l Class (Reference Type)
n 객체화 시 힙 메모리 영역에 저장됨
n 멀티스레딩시 Lock 활용 필요
n 상속가능
l Struct (Value Type)
n 대입시 값 자체가 복제 (공유불가).
n 불변성
n 멀티스레팅에 안전
n 상속 불가
5. Frame 와 bound의 차이
l Frame
n 부모뷰의 좌표 내에서의 view의 위치와 크기
l Bound
n 자기 자신의 좌표 내에서의 위치와 크기
n 이걸 변화시키면, 자식 뷰들도 같이 이동 (scrollview bound)
6. GCD에 대해 설명하세요. Grand Central Dispatch
A. GCD - Multicore Process를 위한 Thread programming의 방법이다. 스레드를 관리하면서 동시적으로 작업을 실행시키는 저수준 API를 제공하는 라이브러리이다.
B. 스레드 풀의 관리를 프로그래머가 아닌 운영체제에서 관리
C. 프로그래머가 실행할 태스크(작업)을 생성하고 Dispatch Queue에 추가하면 GCD는 태스크(작업)에 맞는 스레드를 자동으로 생성해서 실행하고 작업이 종료되면 해당 스레드를 제거합니다.
1. GCD에 대해 설명하세요. Grand Central Dispatch
A. GCD - Multicore Process를 위한 Thread programming의 방법이다. 스레드를 관리하면서 동시적으로 작업을 실행시키는 저수준 API를 제공하는 라이브러리이다.
B. 스레드 풀의 관리를 프로그래머가 아닌 운영체제에서 관리
C. 프로그래머가 실행할 태스크(작업)을 생성하고 Dispatch Queue에 추가하면 GCD는 태스크(작업)에 맞는 스레드를 자동으로 생성해서 실행하고 작업이 종료되면 해당 스레드를 제거합니다.
2. RSA
대표적인 비대칭키 암호화 방식이다
암호화할 때 키를 "공개키", 복호화할 때 키를 "개인키"
암호화 가능한 길이가 딱 245byte 까지
3.AES
AES는 "Advanced Encryption Standard"를 줄인 말이라고 한다(고급 암호화 표준)
"대칭키"라는 임의의 키를 만들어서, 암호화하고자 하는 "문자열"을 "대칭키" 라는 키로 암호화 하는 방식이다
"대칭키" 하나로 암호화 및 복호화 모두 진행
앱 시닝(app thinning)이란?
애플리케이션이 디바이스에 설치될 때, 앱 스토어와 운영체제가 디바이스의 특성에 맞게 설치되도록 하는 설치 최적화 기술
슬라이싱: 해당 디바이스에 가장 적합한 조각을 전달
비트코드: 기계언어로 번역되기 이전 단계의 중간표현, 비트코드를 사용하여 업로드를 하면 애플이 애플리케이션을 재컴파일하여 앱 바이너리(app binary)를 생성합니다
주문형리소스: 필요할 때 다운로드 받는다는 것
'iOS' 카테고리의 다른 글
[iOS] Lifecycle of UIView (0) | 2022.03.12 |
---|---|
[Xcode Build System] Build 버튼을 눌렀을 때 어떤 일이 일어날까? (0) | 2022.03.03 |
[Private] iOS 면접 대비 (0) | 2021.10.07 |
[iOS] 앱스토어 리젝 조치1 (0) | 2021.06.13 |