Swift
WWDC 2024) 힙 메모리 분석하기
Measurement힙을 이해하면 application의 virtual memory를 먼저 이해해야한다. 앱이 시작되면서 virtual memory의 빈 주소 공간을 얻는다. 그리고, App executable, Linked libraries을 로드하고 읽기 전용 Resources 영역에 매핑한다. 또한 앱 실행시 앱은 각 스레드에 local var, temp var에 대한 stack 영역을 사용하며, dynamic, static 메모리는 힙 이라고 통칭되는 메모리 영역에 배치된다. 힙은 단지 하나의 메모리 블록이 아니라 여러 virtual memory 영역으로 구현된다. Regions을 좀 더 확대하면, 각 Region이 개발 힙 alloc으로 구분된다. 내부적으로 이 Region은 16KB 메모리 ..
Metal Rendering
Rendering the Triangle 랜더링은 다섯 단계로 수행된다. Display Link 생성 Render Pass Descriptor 생성 Command Buffer 생성 Render Command Encoder 생성 Command Buffer를 커밋 Note: 이론적으로 이 앱은 실제로 프레임 마다 랜더링할 필요가 없다. 왜냐하면 삼각형이 그려진 후에는 움직이지 않기 때문이다. 그러나 대부분의 앱은 움직이는 부분이 있기 때문에 이 방식을 배우면, 미래의 튜토리얼에 좋은 시작점을 제공할 수 있을 것이다. 1. Creating a Display Link 화면이 갱신될 때마다 화면을 다시 그릴 수 있는 방법이 필요할 것이다. CADisplayLink는 디스플레이의 새로 고침 속도에 동기화된 타이머다..
Metal Start
Start Metal은 Apple 하드웨어에서 매우 효율적으로 설계되어 OpenGL ES를 사용할 때보다 향상된 속도와 낮은 오버헤드를 제공한다. 이 튜토리얼에서는 Metal API를 사용해서 간단한 삼각형 그리기를 해볼 것이다. 만약 OpenGL등의 경험이 있다면 Metal에도 동일한 개념이 많이 적용되어 있어 쉽게 할 수 있을 것이다. Metal을 사용해 랜더링을 하려면 7단계를 따라야 한다. 1. MTLDevice 2. CAMetalLayer 3. Vertex Buffer 4. Vertex Shader 5. Fragment Shader 6. Render Pipeline 7. Command Queue 1. MTLDevice 먼저 MTLDevice에 대한 참조를 얻어야 한다. GPU에 직접적으로 연결되..
KeyPath
Swift 4에서 도입된 KeyPath는 속성이나 서브스크립트에 대한 참조를 나타내는 안전한 방법이다. KeyPath를 사용하면 속성의 이름을 직접 사용하는 대신에 키 경로를 통해 속성에 접근할 수 있다. 이를 통해 컴파일러가 키 경로의 유효성을 검사하고 타입 안정성을 보장할 수 있다. KeyPath는 세 가지 주요 유형으로 분류된다. KeyPath to a Property (속성에 대한 KeyPath): 이 유형의 KeyPath는 특정 타입의 속성에 대한 참조. 예를 들어, KeyPath는 Person 타입의 String 속성에 대한 KeyPath이다. struct Person { var name: String var age: Int } let person = Person(name: "John", ag..