본문 바로가기
iOS 메모리 구조 Code 영역 우리가 작성한 소스 코드가 기계어 형태로 저장되어 있다 컴파일 타임에 결정되고, 중간에 코드가 변경되지 않도록 Read-Only 형태로 저장된다. Data 영역 전역 변수, static 변수가 저장된다 프로그램 시작과 동시에 할당되고, 프로그램이 종료되어야 메모리에서 해제된다. 실행 도중 변수 값이 변경될 수 있으니 Read-Write로 지정된다 Stack 영역 함수 호출 시 함수의 지역변수, 매개변수, 리턴 값 등등이 저장 함수(코드 블록)가 종료되면 저장된 메모리도 해제된다 컴파일 타임에 결정되기 때문에 무한히 할당할 수 없다 Heap 영역 ARC에 의해서 Reference Counting이 관리되는 영역이다. Code, Data, Stack, Heap 중에서 유일하게 런타임에 결정되기.. 2022. 3. 4.
iOS File System = SandBox 구조 샌드박스(Sandbox)란 직역하면 모래통인데, 어린아이를 보호하기 위해 이 샌드박스 내에서만 놀도록 하는 의미에서 유래된 보안 모델이다. 보안을 위해서 앱을 설치할 때 운영 체제는 자동으로 해당 앱에 대한 샌드박스를 만듭니다. iOS는 기본적으로 앱마다 별도의 파일을 생성해서 공유되지 않도록 하고 외부로부터 들어온 접근에 대해서 보호되는 영역으로 시스템이 부정적으로 조작되는 것을 막는 보안 형태를 갖고있다. 하나의 앱은 하나의 샌드박스 내에서만 놀 수 있는 것. 즉, 샌드박스는 파일, 환경설정, 네트워크 리소스, 하드웨어 등에 대한 앱의 접근을 제한하는 세분화된 제어 집합, 커널 수준에서 시행되는 접근 제어 기술 왼쪽 그림처럼 앱이 샌드박스화 되지 않는다면 앱은 실행하는 사용자의 모든 권한을 갖게되고 .. 2022. 3. 4.
Frame-base layout vs Auto layout Frame-Base Layout 사각형 뷰를 그릴때 좌표와 사이즈를 이용하여 뷰를 정의하는 방법 예를들어 뷰는 "좌표 (20, 20)에 위치하고 폭은 120, 높이는 80을 가지고 있다." 라고 정의를 하면 정의한 좌표와 사이즈에 따라서 뷰가 그려진다 단말기의 해상도에 따라 뷰의 외부 여백이 달라지게 된다. Auto layout 뷰의 크기와 위치를 constraints에 의해서 동적으로 계산해주는 레이아웃 뷰를 정의할때 "어느 뷰로부터 어느만큼 떨어져있다."라고 불리는 제약사항(constraint)을 정의해준다. Auto Layout의 가장 큰 장점은 여러 해상도를 유연하게 지원할 수 있다는 것. Auto Layout의 경우에는 제약사항(constraint)을 걸어두면 해상도가 작은 단말기든, 높은 단말.. 2022. 3. 2.
translatesAutoresizingMaskIntoConstraints 속성 translatesAutoresizingMaskIntoConstraints A Boolean value that determines whether the view’s autoresizing mask is translated into Auto Layout constraints. If this property’s value is true, the system creates a set of constraints that duplicate the behavior specified by the view’s autoresizing mask. This also lets you modify the view’s size and location using the view’s frame, bounds, or center p.. 2022. 2. 23.
Main Run Loop & Update Cycle 이 포스트는 view, layout 업데이트 메소드를 정리하는데 필요한 연관지식을 먼저 설명을 하고 view, layout 업데이트 메소드를 설명할 예정. 순서는 다음과 같다 1. Main Run Loop 2. Update Cycle 3. constraints 업데이트 4. layouts 업데이트 5. display 업데이트 6. Drawing Cycle 1. Main Run Loop 앱이 실행되어 시스템에서 일어나는 프로세스들을 https://yongminlee26.tistory.com/204 에 정리했었다. 앱이 실행되면 UIApplication 객체는 유저가 일으키는 이벤트들을 처리하는 프로세스 Main Run Loop를 실행 하여 유저로부터의 input 이벤트를 해석하고 그에 상응되는 애플리케이션.. 2022. 1. 24.
Non-Escaping Closure 와 Escaping Closure Non-Escaping 클로저는 함수의 인자로 전달됐을 때, 함수의 실행이 종료되기 전에 실행되는 클로저. Escaping 클로저는 클로저가 함수의 인자로 전달됐을 때, 함수의 실행이 종료된 후 실행되는 클로저. Non-Escaping 클로저 func runClosure(closure: () -> Void) { closure() } 클로저가 실행되는 순서를 보면 클로저가 runClosure() 함수의 closure 인자로 전달됨 함수 안에서 closure() 가 실행됨 runClosure() 함수가 값을 반환하고 종료됨 이렇게 클로저가 함수가 종료되기 전에 실행되기 때문에 closure는 Non-Escaping 클로저이다. Escaping 클로저 func makeRequest(_ completion: @.. 2021. 12. 28.