분류 전체보기 457

defer로 인해 lock의 범위가 넓어져 발생한 문제 분석

defer로 인해 lock의 범위가 넓어져 발생한 문제 분석 동시성 코드에서 lock은 가장 직관적인 장치 중 하나로 여러 스레드가 같은 상태를 동시에 읽고 쓰면 race condition이 발생할 수 있기 때문에 공유 자원을 보호하기 위해 lock을 사용. 문제는 아래의 코드 패턴은 락의 범위를 함수 끝까지 늘려서 이 경우 후속 로직에서 lock을 다시 잡아야 하는 코드가 존재면 문제가 발생할 수 있음.func foo() { lock.lock() defer { lock.unlock() } // do something} 문제가 발생하는 코드 예시락을 잡은 채 기다리는 구조가 생기면 장기 대기나 데드락으로 이어질 수 있음.특히 코드와 로직이 복잡할수록 원인이 코드 한가운데에 숨어..

기기별 RAM 용량에 따른 이미지 동적 캐시 사이즈 설계

기기별 RAM 용량에 따른 이미지 동적 캐시 사이즈 설계 글로벌 서비스를 운영하다 보면, 여전히 RAM 2GB~3GB 수준의 구형 기기 사용자를 무시할 수 없음.iPhone 8, iPhone SE 1세대, 일부 보급형 기기처럼 메모리 여유가 크지 않은 환경에서는, 캐시 전략 하나만으로도 앱 안정성이 크게 달라질 수 있음. 이미지 캐시는 사용자 경험을 빠르게 만들기 위한 중요한 장치지만, 동시에 메모리를 많이 사용하는 기능이기도 함.그래서 캐시 크기를 고정값으로 두면 다음과 같은 문제가 생김저사양 기기에서는 메모리 압박으로 크래시 위험이 커짐고사양 기기에서는 더 많은 자원을 활용하지 못해 비효율이 발생함기기의 물리적 RAM 용량을 기준으로 이미지 캐시 사이즈를 동적으로 결정하는 방식을 적용 왜 동적 설정이..

빠르게 링크: 빌드 및 실행 시간 개선 (Link fast: Improve build and launch times) - WWDC22

빠르게 링크: 빌드 및 실행 시간 개선 (Link fast: Improve build and launch times) - WWDC22 목차What is static linking?몇 가지 예와 정적 링킹이 무엇인지 정의Recent ld64 improvements애플의 정적 링커인 ld64의 신기능 Sattic linking best practices정적 링킹에 대한 배경시직과 함께 모범 사례에 대해서 설명What is dynamic linking?동적 링킹 과정에서 어떤 일이 발생하는지 다룸Recent dyld improvements올해 dyld의 새로운 기능Dynamic linking best practices동적 링크 시간 성능 개선을 위해 할 수 있는것New tools바이너리에 무엇이 있고, 동적 ..

apple/WWDC 2026.01.02

Xcode 빌드에서의 병렬 처리에 대한 오해 해소(Demystify parallelization in Xcode builds) - WWDC22

Xcode 빌드에서의 병렬 처리에 대한 오해 해소(Demystify parallelization in Xcode builds) - WWDC22 Xcode의 빌드 프로세스에 대해 자세히 정리 목차Core concepts빌드의 핵심 개념 및 빌드 성능 문제를 검토하는데 도움이 되는 Xcode 도구 탐색Build phase타겟 빌드 시 Xcode의 병렬화 증가 방법Corss-Target buildsXcode가 어떻게 많은 타겟으로 구성된 프로젝트를 구축하면서 빌드를 전체적으로 병렬로 처리하는지 Xcode의 빌드 시스템은 전체 프로젝트의 표현으로 호출.모든 source file, assets, build configuration 등 실행 타겟과 같은 기타 구성을 포함. 빌드 시스템은 앱 빌드 방법에 대..

apple/WWDC 2025.12.30

swift rethrows

swift rethrows 함수나 메서드는 rethrows 키워드를 사용하여 선언할 수 있음.이는 함수 매개변수 중 하나가 에러를 던질 경우에만 에러를 던진다는 것을 의미.이러한 함수와 메서드를 rethrowing 함수(rethrowing functions) 또는 rethrowing 메서드(rethrowing methods)라고 부름. func someFunction(callback: () throws -> Void) throws { try callback()} rethrowing 함수와 메서드는 적어도 하나의 throwing 함수 매개변수를 가져야 함.rethrowing 함수나 메서드는 오직 catch 블록 안에서만 throw 문을 포함할 수 있음. 이 규칙을 통해 do-catch 구문 안에서 ..

AVAudioEngine, AVAudioNode 정리

AVAudioEngine, AVAudioNode 정리 AVAudioEngine과 관련한 내용을 모아서 정리 목차AVAudioEngine오디오 렌더링이란?OverviewCreate an Engine for Audio File PlaybackAVAudioNodeOverviewConfiguring an Input Format BusAVAudioNodeBusinputFormat(forBus:)name(forInputBus:)numberOfInputsCreating an Output Format BusoutputFormat(forBus:)name(forOutputBus:)numberOfOutputsInstalling and Removing an Audio TapinstallTap(onBus:bufferSize:..

AVAudioFormat 정리

AVAudioFormat 정리 AVAudioFormat에 대해서 정리하며 연관된 지식도 모두 함께 정리. 목차AVAudioFormatAVAudioFormat의 프로퍼티들Getting the Audio Stream DescriptionstreamDescriptionGetting Audio Format ValuessampleRatechannelCountchannelLayoutformatDescriptionDetermining the Audio FormatisInterleavedisStandardcommonFormatsettingsmagicCookieAVAudioFormat과 AudioStreamBasicDescription의 비교 정리Channel과 ChannelLayout의 차이AVAudioCommonFo..

AudioStreamBasicDescription 정리

AudioStreamBasicDescription 정리 CoreAudioType에 속하는 AudioStreamBasicDescription를 정리. 목차AudioStreamBasicDescription패킷의 지속 시간(Duration) 계산구조체의 모든 필드를 0으로 초기화하는 코드Core Audio에서 사용하는 용어 정의AudioStreamBasicDescription의 Instance PropertymFormatIDmSampleRatemBitsPerChannelmBytesPerPacketmReservedmFramesPerPacketmChannelsPerFramemBytesPerFramemFormatFlags AudioStreamBasicDescription 오디오 스트림을 위한 포맷 명세서. 오..

AVAudioPCMBuffer 정리

AVAudioPCMBuffer 정리 AVAudioPCMBuffer를 학습하고 이와 관련한 개념들을 정리. 목차AVAudioPCMBuffer 선수 지식 정리AVAudioPCMBufferAVAudioPCMBuffer의 인스턴스 프로퍼티AVAudioPCMBuffer().frameLengthAVAudioPCMBuffer().frameCapacityAVAudioPCMBuffer().strideAVAudioPCMBuffer().floatChannelDataAVAudioPCMBuffer().int16ChannelData, AVAudioPCMBuffer().int32ChannelData AVAudioPCMBuffer 선수 지식 정리 AVAudioPCMBuffer를 학습하기 전에 사전 개념으로 필요.자세한 이론은 하..

AssetInventory 정리 + AssetInstallationRequest

AssetInventory 정리 + AssetInstallationRequest AssetInvenotry에 대해서 정리하고 관련된 메서드들 하나씩 정리 목차AssetInventoryOverviewInstall AssetsManage AssetsDownloading and installing assetsassetInstallationRequest(supporting:)Checking asset statusAssetInventory.StatusdownloadinginstalledsupportedunsupportedType PropertiesAssetInventory.maximumReservedLocalesAssetInventory.reservedLocalesType MethodsAssetInventory..