본문 바로가기

강의 정리12

WWDC 2019: Advances in UI Data Sources에 관하여 1. Current State-of-the-Art 우리가 UITableView나 UICollectionView에서 UIDatasource와 상호작용하는 방법은 무엇입니까? 아래 코드는 UICollectionViewDataSource 구현 예시입니다. func numberOfSections(in collectionView: UICollectionView) -> Int { return models.count } func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { return models[section].count } func collectionView(_ collectionVie.. 2023. 8. 25.
WWDC 2018: iOS Memory Deep Dive(Demo)에 관하여 Demo 우리는 NASA에서 얻은 고해상도의 태양계 이미지에 필터를 적용하는 앱을 개발하고 있었다. 근데 James가 앱의 메모리 사용량을 분석한 결과를 보여주었다. 위 사진이다. 여기서 아직 게이지가 'red' 영역에 도달하지 않았기 때문에 앱에 충분한 사용가능 메모리가 있다고 생각할 수 있다. 하지만 좋은 생각이 아니다. 왜냐하면 모든 장치가 2GB의 메모리를 가지고 있는 것이 아니기 때문이다. 즉, 이 앱이 1GB의 메모리를 갖는 장치에서 실행된다면, 운영체제에 의해 앱은 이미 종료되었을 가능성이 크다. 두 번째, 운영체제는 앱이 사용하는 메모리 양뿐만 아니라 운영체제에서 발생하는 다른 활동들도 고려하여 앱을 종료할지 결정한다. 따라서 'red' 영역에 도달하지 않았다고 해서 앱이 종료되지 않을 위.. 2023. 6. 24.
WWDC 2018: iOS Memory Deep Dive(이미지)에 관하여 Images 이미지에 대해 가장 중요하게 기억해야 할 점은 메모리 사용량이 파일크기가 아닌 이미지의 'dimensions' 과 관련되어 있다는 것이다. 이 사진은 가로 2048 픽셀, 세로 1536 픽셀의 크기를 가지고 있고, 디스크 상의 파일 크기는 590KB이다. 하지만 실제로 얼마만큼의 메모리를 사용할까? 그 값은 10MB라는 굉장히 큰 수치가 나온다. 가로 픽셀 수와 세로 픽셀 수를 곱한 값인 2048 * 1536에 픽셀 당 4byte를 곱하면 대략 10MB가 나오기 때문이다. 왜 이런 차이가 발생할까? 이를 파악하기 위해서는 iOS에서 이미지가 어떻게 작동하는지에 대해 알아보아야 한다. iOS에서 이미지가 어떻게 작동되는지 1. 로드 단계 이 단계에서는 압축된 590KB의 JPEG 파일을 메모리.. 2023. 6. 21.
WWDC 2018: iOS Memory Deep Dive(메모리 프로파일링)에 관하여 Memory Footprint 메모리는 'Page' 단위로 관리된다. 페이지는 일반적으로 16K 크기를 가지며, 한 페이지에는 여러 개의 객체가 위치할 수도 있고, 큰 객체가 여러 페이지에 걸쳐 위치할 수도 있다. 시스템이 앱에 메모리 페이지를 할당하고, 아직 변경되지 않았다면, 그 페이지는 'clean' 상태이다. 하지만 앱이 페이지에 데이터를 쓰면(변경), 그 페이지는 'dirty' 상태가 된다. 앱의 메모리 사용량은 이러한 페이지들의 총 크기로 측정된다. 위 사진에서 20,000 개의 정수를 담는 배열을 할당하면, 시스템은 이를 위해 여러 개의 페이지를 할당한다. 그리고 배열의 처음과 끝에 있는 정수를 변경하면, 해당 정수가 위치한 페이지는 'dirty' 상태가 되고, 그 사이에 있는 페이지들은 아.. 2023. 6. 19.
WWDC 2016 - Protocol and Value Oriented Programming in UIKit Apps 세션에 관하여 Model Layer dream은 우리의 모델이다. 'description', 'creature' 그리고 'effects' 를 가지고 있다. Model에서 클래스를 사용하는 것이 왜 문제가 될까? 참조타입은 암시적 공유를 하고 있기 때문에 'dream2' 의 'description' 을 변경하면 'dream1'의 'description' 도 암시적으로 변경된다. 따라서 'dream1' 의 원하지 않는 변경을 통해 버그가 발생할 수 있다. 관계도 이 다이어그램은 관계를 보여준다. 이런 관계 중 일부는 명시적이고 암묵적일 수 있고, 일부는 one-way 또는 two-way일 수 있으며, 일부는 dynamic 또는 static 할 수도 있다. 그리고 이 관계는 매우 복잡하다. 구조체를 사용하여 해결 값 타입을.. 2023. 6. 8.
WWDC2021 - ARC in Swift - Basics and beyond 에 관하여. ARC에 대한 개념을 정리하던 중, ARC에 대한 깊은 이해를 위해 WWDC의 ARC 관련 세션을 보고 정리해본다. Object lifetimes and ARC -객체의 수명주기와 ARC에 대해서 알아보자. 객체의 수명주기는 init() 초기화에서 시작되고, 마지막 사용에서 종료된다. ARC는 수명주기가 종료된 객체를 메모리에서 해제시킨다. ARC는 참조 카운트를 통해 객체의 수명주기를 추적한다. Swift의 컴파일러가 retain/release 작업을 주입한다. Swift의 런타임에 'retain' 은 참조 카운트를 증가시키고, 'release' 는 참조 카운트를 감소시킨다. 참조 카운트가 0이 되면 객체는 메모리에서 할당 해제된다. 이 작업들이 어떻게 작동되는지 예시를 통해 알아보자. 우리가 여행 앱.. 2023. 5. 31.