분류 전체보기 67

Loading

Loading 컨텐츠가 로딩될 때 빈화면이나 정적인 화면은 앱이 정지된것 처럼 보이게 하여 혼란을 일으키고 잠재적으로 사람들이 앱을 떠나게 만들 수 있다. Make it clear when loading is occurring 로딩이 발생할때 명확히 해라. 최소한 어떤 일이 일어나고있음을 알리는 활동 spinner를 보여줘라. 더 좋은 방법으로 사람들이 대기 시간을 측정할 수 있도록 명확한 진행 상황을 표시해라. Show content as soon as possible 가능한 빨리 컨텐츠를 보여줘라. 사람들이 기대하는 화면을 보기전에 컨텐츠가 로딩될 때 까지 기다리게 하지 말아라. 화면을 바로 보여주고, placeholder 텍스트, 그래픽, 애니매이션을 사용하여 아직 컨텐츠를 사용할 수 없다는 것을 ..

HIG 2022.01.20

iOS Design Theme

iOS Design Theme 앱디자이너로서 앱스토어 상위 차트에 오르기 위해 특별할 상품을 제공할 수 있다. 상위에 오르기 위해 기능에 대한 높은 기대치를 충족해야 한다. iOS에는 다른 플롯팸과 다른 세가지의 주요 테마가 있다. Clarity(명확성) 시스템 전체에서 텍스트는 모든 크기에서 읽을 수 있고 아이콘은 정확하고 명확하며, 장식은 미묘하고 적절하며 기능에 대한 날카로운 초점은 디자인의 동기를 부여한다. 대조적인 공간, 색깔, 폰트, 그래픽 및 인터페이스 요소들은 중요한 내용을 강조하고 상호작용을 전달한다. Deference(차별성) 부드러운 모션과 선명하고 아름다운 인터페이스는 사람들이 콘텐츠를 이해하고 상호작용하는 동시에 요소들끼리 경쟁하지 않는다. 컨텐츠는 일반적으로 전체화면을 채우지만 ..

HIG 2022.01.20

DI(Dependency Injection)

DI(Dependency Injection)이란? 의존성을 객체 외부에서 주입해주는 형식 SOLID원칙중 DIP(의존성 역전 원칙)으로 특정 모듈에 의존하지 않고 의존성이 역전됨을 의미 상위모듈은 의존성 주입을 통해 하위 모듈에 의존하지 않고 구조 설계 가능 Dependency Injection이 적용되지 않은 경우 class Foo { private var bar: Bar init() { self.bar = Bar() } } Dependency Injection이 적용된 경우 class Foo { private var bar: Bar init(bar: Bar) { self.bar = bar } } DI가 필요한 이유 Interface를 통해 구체타입에 의존하지 않고(결합도↓) 상황에 따라 변경가능하고 ..

Design Pattern 2022.01.19

Image Optimizing

Image Memory Size 2048x1536 픽셀의 590KB size의 이미지를 앱에서 로딩하면 얼마의 메모리가 필요할까? 약 14MB(2048x1536x4/1000000), 픽셀당 4바이트 가정 매우 많은 메모리 소비 Image Rendring Process 1. Load(iOS는 압축된 이미지를 가져와 590KB를 메모리에 로드) 2. Decode(GPU가 읽고 이해할 수 있도록 decode, 이 과정에서 10MB라는 큰 용량 차지) Data Buffer -> ImageBuffer(Decoding을 통해 Data Buffer에 포함된 이미지 크기와 동일한 Image Buffer할당) 3. Render Image Buffer -> Frame Buffer(ImageView를 실제 화면에 Displ..

swift 2022.01.18

iOS 디렉토리 구조

iOS 디렉토리 구조 iOS는 Sandbox구조로 Sandbox 내부만 접근 가능 Bundle Container 앱의 Bundle파일을 보유(.app) info.plist, 각종 리소스(strings..)파일 보유 iCloud 백업x Data Container Documents 영구저장소 처럼 사용할 수 있고 iCloud백업 시 자동으로 백업 보통 사용자가 앱을 사용하면서 필요한 내용을 저장하거나 생성한 데이터를 저장 iCloud 백업o Library 사용자가 선별적으로 데이터를 저장 Library/Caches에 이미지 저장 가능 iCloud 백업o Temp 앱이 실행될때 일회성으로 소비되는 리소스 저장 iCloud 백업x iCloud Container iCloud 스토리지

iOS 기초 2022.01.18

ImageCache

ImageCache 이미지 캐시로 이미지를 받아오는 로직은 총 3가지로 분류된다. 메모리 캐시 디스크 캐시 URL 요청 1. 메모리 캐시 NSCache사용 Key-Value쌍으로 이루어진 Generic Type의 클래스 메모리 영역 일부를 Caching으로 사용 단점: 앱이 종료되면 메모리에서 리소스가 해제되어 memory caching된 리소스 사라짐 캐시가 보유하는 최대 object수를 관리하는 countLimit설정 가능 캐시가 object제거를 시작하기 전에 보유할 수 있는 최대 총 비용을 설정하는 totalCostLimit설정 가능 2. 디스크 캐시 FileManager사용 데이터를 파일형태로 디스크에 저장 .cachesDirectory에 저장(Data Container/Libraray/Cach..

swift 2022.01.18

Making Changes to Reduce Memory Use

Making Changes to Reduce Memory Use 과도한 사용의 일반적인 원인을 해결하여 앱의 메모리 사용량 줄이기 Overview 앱의 메모리 사용량을 특정 기능이나 작업으로 localize화 할 때 메모리 사용량을 줄이기위한 변화를 할 수 있다. 과도한 메모리 사용의 일반적인 원인과 영향을 줄이기 위한 조치는 아래에 설명되어 있다. Optimize Image Assets 큰 이미지, 특히 높은 컬러 depth를 가지고있는 사진은 많은 메모리를 사용한다. 앱이 보여주는 사이즈에 맞게 asset을 최적화 해라. 다른소스 (예를들어 네트워크로부터 요청한 이미지 또는 사용자의 포토 앨범에서 가져온 사진들)에서 로드된 이미지를 적절한 크기와 color depth로 변환해라. 메모리 영향을 최소화..

공식문서 2022.01.17

Reducing Your App's Memory Use

Reducing Your App's Memory Use 메모리 사용 metric을 분석하고 메모리 효율성을 최대화 하도록 변경하여 앱의 성능을 개선하십시오 Overview 디바이스의 메모리(RAM)는 app, OS process, kernel에서 공유하는 제한적인 리소스이다. iOS는 다양한 메모리 요구사항을 충족하는 기술이 있지만 이러한 기술들은 많은 속도와 응답성을 소비한다. 예를들어 iOS는 앱이 백그라운드에서 실행중일 때 memory-intensive app을 solid-state storage로 전송할 수 있다. 이때 앱이 포그라운드로 돌아오거나 백그라운드 작업을 실행하려고 할 때 지연이 발생한다. 만약 앱이 너무많은 메모리를 사용하고 있다면, iOS에서 warning을 보내준다. 너는 cras..

공식문서 2022.01.03

Queue

Queue FIFO(First In First Out)형식의 자료구조 enqueue(데이터 추가)와 dequeue(데이터 추출)를 사용해 구현 swift의 reversed(시간복잡도 O(1))를 사용하여 구현 구현 코드 struct Queue { var enqueue: [T] var dequeue: [T] = [] var count: Int { return self.enqueue.count + self.dequeue.count } var isEmpty: Bool { return self.enqueue.isEmpty && self.dequeue.isEmpty } var first: T? { if self.dequeue.isEmpty { return self.enqueue.first } else { retu..

자료구조 2021.12.29

Heap

Heap 두개의 속성을 만족하는 트리 1) 형태 속성: 힙은 완전 이진트리(모든 노드가 채워져 있고 왼쪽에서 오른쪽으로 채워진 형태) 2) 힙 속성: 모든 노드의 데이터는 자식 노드들의 데이터 보다 크거나 같다 최대값과 최소값을 빠르게 찾아내도록 만들어진 자료구조(최대힙 & 최소힙) 시간복잡도는 O(logN) 배열에 넣고 최대값 & 최소값을 찾으려면 O(n)이 걸리지만 힙으로 구현할 경우 O(logN)구현 가능(우선순위 큐) 최대힙과 최소힙 최대힙 : 내 자식 노드의 값은 내 값보다 작거나 같아야 한다(Root노드 최대 값) 최소힙 : 내 자식 노드의 값은 내 값보다 크거나 같아야 한다(Root노드 최소 값) Index 계산 부모 index : 자식 index / 2 왼쪽자식: index * 2 오른쪽 ..

자료구조 2021.12.28