apple/iOS, UIKit, Documentation 82

iOS 히치(hitch)에 대해서 알아보기

Understanding hitches in your app 사용자 인터페이스에서의 중단과 히치(hitch)에 대해 알아보기인간의 인식은 화면에서의 움직임 중단에 매우 민감하며, 화면에서 부드러운 움직임이 짧은 시간 동안 멈추는 경우, 단 몇 밀리초라도 쉽게 눈에 띌 수 있음. 이러한 중단을 히치(hitch)라고 부름히치는 스크롤이나 드래그 같은 지속적인 인터랙션 또는 애니메이션 중에 발생각 히치는 사용자 경험에 영향을 미치므로 앱에서 가능한 한 히치를 최소화하는 것이 중요.히치란?움직임 중단은 화면이 예상한 속도로 업데이트되지 않을 때 발생하며, 프레임이 준비되지 않아 화면이 제때 업데이트되지 않으면 프레임이 지연됨.지연된 프레임은 종종 시스템이 이후 한두 개 이상의 프레임을 건너뛰게 만드는데, 이를 ..

iOS 최적화된 디스크 쓰기 관리

iOS 최적화된 디스크 쓰기 관리 데이터 저장을 위해 디스크에 쓰는 행위는 배터리 수명 및 저장 장치의 수명에 영향을 미침.디스크 쓰기를 줄이는 방법을 이해하면 앱 성능을 최적화하고 사용자 경험을 개선할 수 있음.  일반적으로 모든 iOS기기와 일부 macOS는 영구 저장소로 SSD를 사용함. SSD나 저장 매체에 있는 데이터에 엑세스 하는 속도는 RAM에 비해서 느림. Xcode와 Instruments를 사용하여 앱의 디스크 쓰기 성능을 파악할 수 있음. SSD 접근 최적화하기시스템이 SSD의 블록에 쓰기 작업을 수행할 때 해당 블록에 대한 새로운 읽기 요청은 기존 수행하는 쓰기 작업이 완료할 때 까지 대기함.SSD에 쓰는 것은 읽기 보다 느린 작업.읽기 및 쓰기 요청을 인터리빙하면 앱의 성능이 느..

Swift URLProtocol (URLSessionConfiguration)

Swift URLProtocol (URLSessionConfiguration) 최근 서비스에서 애드가드를 막기 위한 방법을 고민하고 있는데, 네트워크 관련 부분을 학습함.학습 후에 테스트코드, 퍼널 분석을 위한 로그 및 시스템 os로그 기록 등 더 다양하게 활용할 수 있을 것으로 기대. 학습 예제 파일 (SPM - Currency)목차OverviewURLProtocol 간단 요약코드 구현 예제주요 메서드 설명코드 사용 예제활용할 수 있는 포인트 OverviewApple의 공식 문서에서 제공하는 URLProtocol은 URL 로딩 시스템의 요청을 처리하는 데 사용되는 강력한 커스텀 프로토콜.URLProtocol은 애플의 URL 로딩 시스템이 네트워크 요청을 처리하는 방식을 커스터마이즈하거나 대체할 수 있도..

Swift Mixin and Trait

Swift Mixin and Trait iOS 프로그래밍에서 주로 사용되는 언어는 Swift로 다중 상속을 지원하지 않음.Swift에서는 인터페이스(Interface)를 프로토콜(protocol)로 사용하고 있어서 프로토콜이라는 용어와 인터페이스의 의미는 같음. 목차배경mixin이란?interface(protocol), mixin, trait예제를 통해 알아보기 1예제를 통해 알아보기 2예제를 통해 알아보기 3swift 다중 상속 컴파일 오류몇가지 실험들둘 다 채택한 경우명시적 캐스팅배경객체지향 프로그래밍에서 상속의 사용은 코드의 결합도를 크게 증가시킴. 이로 인하여 많은 문제점들이 발생.상속을 코드 중복을 해결하기 위한 수단으로 사용하면 안됨.상속은 부모와 자식간의 높은 결합도를 가지게 되어 코드의 ..

[Swift] Timer + RunLoop, backgroundQueue (swift-corelibs-foundation)

[Swift] Timer + RunLoop, backgroundQueue (swift-corelibs-foundation) 서비스 및 기능에 따라서 RunLoop.main에서 돌아가게 하면 안되는 케이스도 존재. 잘못 설계할 경우 Timer기반으로 동작하는 로그나 기능 등 예상치 못한 결과를 낼 수 있음. RunLoop.main에서 타이머가 아예 방출되지 않거나 RunLoop.main이 아닌 다른스레드에서 돌려야 하는 경우에 대하서 자세히 알아볼 예정 위 케이스들을 내부 구현 코드를 통해 근거 있게 정리해보고자 함. 글의순서 타이머 알아보기 swift-corelibs-foundation내에 Timer 구현 알아보기 Timer 선언부 Timer scheduledTimer 함수 RunLoop 간단히 알아보..

iOS CoreData Relationships

iOS CoreData Relationships iOS CoreData의 Relationship을 공부해보자.연관 포스팅[iOS CoreData 간단한 CRUD](https://rldd.tistory.com/587)[iOS SwiftData in UIKit](https://rldd.tistory.com/588)[iOS CoreData 이론](https://rldd.tistory.com/586)[iOS CoreData Relationships](https://rldd.tistory.com/661) 히스토리2024.10.13CoreData Relationship 정리2024.12.21CoreData Relationship 패키지 모듈화 정리샘플 코드에서 Commnutity Package 참고히스토리샘플코드목..

[Swift] NSCache (swift-corelibs-foundation)

[Swift] NSCache (swift-corelibs-foundation) NSCache 문서를 읽어보다가 `eviction`이란 단어를 보게 되었는데, 대학 수업을 원서로 배울때, `eviction`과 `expiration`에 대해서 깊게 탐구했던 생각이 났음.애플에서 최근에 Foundation 부분을 오픈소스로 공개했는데, NSCache와 관련해서 구현된 코드를 직접 확인하면서 제대로 이해해보고자 함. 글의 순서NSCache OverviewiOS에서 Cache 종류왜 메모리 캐시가 디스크 캐시보다 빠를까?캐시와 관련한 몇가지 정책 및 알고리즘Foundation에서 구현되어 있는 NSCache에 대해서 코드로 알아보기NSCache 선언부NSCache InsertNSCache removeNSCache..

UICollectionView Sticky Header

UICollectionView Sticky Header  UITableView처럼 헤더를 붙게 해달라는 요청이 들어왔는데, 해당 키워드로 검색했을 때UICollectionViewFlowLayout을 커스텀 해서 만드는 글들이 많아서 작성 if let layout = self.collectionViewLayout as? UICollectionViewFlowLayout { layout.sectionHeadersPinToVisibleBounds = true // 헤더를 고정}  UITableView처럼 헤더를 붙게 사용할 수 있음.

Library vs Framework 정리

Library vs Framework 정리 모듈화의 개념을 이해하기 전 기초 지식으로 정리. Library란?개발자가 만들 클래스들의 집합으로 다른  프로그램에서 사용할 수 있도록 제공Framework란?소프트웨어를 개발하는데 있어서 개발 시간을 줄이고, 코드의 재사용성을 증가시키기 위해 묶음이나 뼈대(틀)을 라이브러리 형태로 제공되는 것.제어의 역전 개념이 적용된 대표적 기술 Library와 framework의 차이라이브러리와 프레임워크의 차이는 제어 흐름의 주도성이 누구 / 어디에게 있는가가 포인트즉, 애플리케이션의 흐름(Flow)를 누가 갖고 있느냐의 차이프레임워크는 스스로 제어 흐름의 주도성을 갖는 반면, 라이브러리는 개발자가 가짐.  StaticLibrary / Dynamic Libarary ..

Swift @TaskLocal

Swift @TaskLocal- TaskLocal 값은 Task의 컨텍스트 내에서 바인딩되고 읽을 수 있는 값- Task와 함께 암묵적으로 전달되며, TaskGroup이나 `async let`으로 생성된 하위 Task에서도 접근할 수 있음     TaskLocal 선언하기enum Example { @TaskLocal static let traceID: TraceID?}// Global task local properties are supported since Swift 6.0:@TaskLocalvar contextualNumber: Int = 12 Swift 6.0부터 global로 사용 가능함.global에 대해서 더 자세히 알고 싶다면 댓글(간략정리) 혹은 아래 포스팅 참고.https://..