분류 전체보기 68

iOS 앱의 메모리 사용량 최적화

iOS 앱의 메모리 사용량을 최적화하는 방법은 여러 가지가 있으며, 이는 앱의 성능과 사용자 경험에 직접적인 영향을 미칩니다. 1. 메모리 캐싱 기법 메모리 캐싱은 데이터를 메모리에 저장하여 빠른 접근을 가능하게 하는 기법입니다. iOS에서는 NSCache를 사용하여 이미지 캐싱을 구현할 수 있습니다. NSCache는 메모리 부족 시 자동으로 캐시된 데이터를 제거하여 메모리 사용량을 관리합니다. 예시 코드 import UIKit class ImageCache { static let shared = ImageCache() private var cache = NSCache() // 이미지를 캐시에 저장 func setImage(_ image: UIImage, forKey key: String) { self...

iOS/Common 2024.04.03

iOS에서의 동시성 처리 방식 - GCD, Operation Queue 그리고 Actor

동시성 프로그래밍의 개념 동시성 프로그래밍은 여러 작업을 동시에 실행하여 전체 작업의 처리 시간을 줄이는 것을 목표로 합니다. 이는 컴퓨터의 여러 코어를 활용하여 여러 작업을 동시에 처리하거나, 하나의 코어에서 여러 작업을 빠르게 전환하여 실행하는 방식으로 이루어집니다. 동시성 프로그래밍은 작업의 처리 시간을 줄이는 것 외에도, 사용자 인터페이스의 반응성을 향상시키고, 네트워크 요청과 같은 시간이 오래 걸리는 작업을 백그라운드에서 처리하여 앱의 전반적인 성능을 향상시키는 데 중요합니다. 병렬 처리와 동시 처리 차이 (1) 병렬 처리(Parallel Processing) : 여러 코어를 사용하여 여러 작업을 동시에 처리합니다. 이는 작업의 처리 시간을 줄이는 데 효과적이지만, 작업 간의 데이터 공유와 동기..

iOS/Common 2024.04.02

iOS 메모리 관리와 최적화

메모리 관리는 iOS 앱 개발에서 중요한 주제 중 하나입니다. 메모리는 디바이스에서 정보를 저장하는 데 사용되는 모든 하드웨어를 포함하며, 앱이 실행될 때 실행 가능한 모든 명령어가 RAM에 로드됩니다. 이 때, 시스템은 Heap이라고 불리는 RAM의 일부를 클레임하며, 이곳에서 클래스의 모든 인스턴스가 앱이 실행되는 동안 생존합니다. 메모리 관리는 Heap 메모리의 생명 주기를 관리하면서 더 이상 필요하지 않은 객체가 해제되어 메모리를 재사용할 수 있도록 하는 과정을 의미합니다. iOS 디바이스의 메모리 제약과 앱 메모리 제한 iOS 디바이스의 메모리 제한은 디바이스의 RAM 용량에 따라 달라집니다. 예를 들어, iPhone XS부터 iPhone 13까지는 3GB 이상의 RAM을 가진 디바이스에서 사용..

iOS/Common 2024.04.01

Swift의 메모리 구조

Swift의 메모리 구조 Swift에서 메모리는 주로 네 가지 영역으로 나눌 수 있습니다. (1) 코드(Code) 영역 : 실행 가능한 프로그램 코드를 기계어 형태로 저장합니다. 이 영역은 읽기 전용(Read-Only)이며, 프로그램의 실행 중에 변경되지 않습니다. (2) 데이터(Data) 영역 : Swift 정적 변수, 상수, 타입 메타데이터 등을 저장합니다. 프로그램 시작과 동시에 할당되며 프로그램이 종료되면 메모리가 해제됩니다. 실행 도중 변경될 수 있습니다(Read-Write). var name: String = "FrenteBW" var age: Int = 25 struct Place { static let country: String = "Korea" } 위 코드에서 name, age, Pla..

iOS/Common 2024.03.29

CPU 아키텍처와 AP(Application Processor)

1. 캐시 메모리의 개념과 종류, 역할 캐시 메모리는 CPU와 주기억장치 간의 속도 차이로 인한 성능 저하를 막기 위해 사용되는 메모리입니다. CPU가 필요로 하는 데이터가 레지스터에 없는 경우, 주기억장치로부터 데이터를 읽어오기 위해 상당히 긴 시간을 기다려야 합니다. 캐시 메모리는 이러한 데이터 접근 시간을 줄여 속도를 향상시킵니다. 캐시 메모리는 속도와 용량에 따라 L1, L2, L3 캐시 등으로 분류되며, 숫자가 작을수록 용량이 작고 빠르며, 숫자가 클수록 용량이 크고 느립니다. CPU에 가까울수록 상위 레벨 캐시로 취급하며, 최하위 레벨 캐시의 경우 마지막 레벨을 의미하는 LLC(Last Level Cache)라고도 부릅니다. 2. CPU 아키텍처의 종류와 특징 - ARM과 x86 CPU 아키텍..

Computer Science 2024.03.27

iOS 운영체제: 프로세스, 스레드, 메모리 관리, 샌드박스 이해하기

1. 프로세스와 스레드의 차이점 iOS에서 실행되는 앱은 프로세스와 스레드라는 두 가지 주요 실행 단위를 가지고 있습니다. 프로세스는 실행 중인 프로그램의 인스턴스로, 각각 독립적인 메모리 공간을 가지고 있습니다. 반면, 스레드는 프로세스 내에서 실행되는 흐름의 단위로, 프로세스 내의 메모리 공간을 공유하며 실행됩니다. iOS에서의 프로세스와 스레드 관리 iOS에서는 GCD(Grand Central Dispatch)와 NSOperationQueue를 사용하여 스레드를 관리합니다. 이를 통해 개발자는 복잡한 스레드 관리를 피하고, 메모리 사용량을 최적화할 수 있습니다. GCD를 사용한 스레드 관리 예시 // GCD를 사용하여 백그라운드 스레드에서 작업 수행 DispatchQueue.global(qos: ..

iOS/Common 2024.03.27

[RxSwift] .subscribe { }와 .subscribe(onNext: { })의 차이

// .subscribe { } Observable.just("Tell me something~") .subscribe { (string: Event) in print(string.element) // Optional("Tell me something~") } .disposed(by: self.disposeBag) // .subscribe(onNext: { }) Observable.just("Tell me something!") .subscribe(onNext: { (string: String) in print(string) // Tell me something! }) .disposed(by: self.disposeBag) Q. '.subscribe { }' 형태와 '.subscribe(onNext: {..

[Swift] method는 class, struct, enum 중 어느 곳에 쓰는 게 좋은가

Q. Swift로 iOS Application을 개발할 때, method를 각각 class, sturct, enum 내부에 선언하는 방법과 각각의 장점을 설명해 줘 A. Swift에서 iOS 애플리케이션을 개발할 때, method를 class, struct, enum 내부에 선언하는 방법과 각각의 장점에 대해 설명해 드리겠습니다. 1. Class 내부에 선언하는 방법 - Class는 참조 타입이며, 상속이 가능합니다. - Method는 class의 인스턴스에 속하게 됩니다. - Class 내부에 선언된 method는 상속과 다형성을 활용할 수 있어 유연성이 높습니다. - Class의 인스턴스 간 데이터를 공유하고 변경할 수 있습니다. - Method는 인스턴스 속성에 접근할 수 있으므로 인스턴스의 상태를..

iOS/Common 2023.06.16

[Swift] static func와 그냥 func (feat. Singleton)

Q. iOS Application 개발 과정에서 static func와 func 사이에는 어떤 차이가 있으며, 성능 측면에서 어떤 것이 더 유리한지 Swift 예시 코드와 함께 설명해 줘 A. iOS 애플리케이션 개발에서 'static func'와 'func'의 차이는 주로 사용 방법과 메모리 관리 측면에서 나타납니다. 먼저 'func'은 인스턴스 메서드를 선언할 때 사용되며, 해당 메서드는 클래스의 인스턴스에 속합니다. 이는 해당 클래스의 각 인스턴스에 대해 개별적으로 호출할 수 있는 메서드입니다. 예를 들어, 다음은 'func'의 예시 코드입니다. class MyClass { func instanceMethod() { // 인스턴스 메서드 로직 } } let myObject = MyClass() my..

iOS/Common 2023.06.16

[번역] WWDC 2023’s Keynote Should Get iOS Developers Excited

Steven Curtis라는 런던에 계신 iOS 개발자분이신데, Medium에서 좋은 내용의 포스팅을 많이 해주십니다. Steven Curtis님의 포스팅 내용을 공부하는 김에 다른 분들께도 이 내용을 공유하면 어떨까 싶어서 부족한 영어실력이긴 하지만 번역을 해서 올려봅니다! 원문 링크: https://stevenpcurtis.medium.com/wwdc-2023s-keynote-should-get-ios-developers-excited-262686796742 WWDC 2023’s Keynote Should Get iOS Developers Excited 2023 is the year of iOS development stevenpcurtis.medium.com App Store가 15주년을 맞이하였..

iOS/Common 2023.06.06