iOS

View Draw Cycle
오늘은 View Draw Cycle에 대해 정리해볼거에요.평소에 layoutSubviews와 같은 View Draw Cycle에 해당하는 메소드를 오버라이딩하여 사용하는 경우가 있었는데, 이 메소드가 언제 호출되는지도 모르고 사용하는 건 잘못되었다고 생각하여 이번 기회에 정리해보려고 합니다!틀린 내용이 있을 수 있습니다. 😂Run LoopView Draw Cycle을 알아보기 전에 먼저 런루프에 대한 사전지식이 필요합니다.하지만 아직 런루프에 대해 학습하기 전이고,오늘은 뷰 드로잉 사이클에 대해 학습해보기로 했으므로 간단하게 알아보겠습니다.런루프란?Event(Input source, timer)를 처리하는 루프 객체수행해야 하는 작업이 있을 때 thread를 일하게 하고, 작업이 없을 때 thread를..

왁뮤 3.0 출시 및 장애 대응 기록
2024년 9월 7일(토), 왁타버스 뮤직 3.0 출시와 함께 발생한 장애를 포함한 이벤트들을 타임라인 순으로 기록하려고 합니다. 출시 일정우선 출시 계획은 다음과 같았습니다.오후 5시: 서버에서 진입 금지 플래그 설정오후 5시 30분: 앱 배포오후 6시: PV영상 공개 & 서버 진입 금지 플래그 제거컨텐츠 유출을 막기 위해 서버에서 진입 금지 플래그를 설정해두고, 실제 앱 공개시간인 오후 6시로부터 30분 정도 여유를 두고 배포를 누르기로 했습니다.그리고 6시에 PV 영상이 공개됨과 동시에 진입 금지 플래그를 제거해 유저들을 받을 계획이었습니다. 오후 5시 배포 시작완벽한 계획과는 달리 시작부터 문제가 발생했습니다.배포 당일에 계획이 수정되었지만, 예약 출시 시간을 변경하지 않아 5시에 배포가 시작되게..

GCD Sync, Async, Serial, Concurrent 조합해보기
GCD를 활용해 비동기 코드를 작성하며 자주 헷갈리는 sync, async 그리고 Serial, Concurrent를 조합했을 때 어떻게 동작하는지 그림과 함께 정리해보려고 합니다. GCD가 무엇인지는 이 곳에서 확인 가능합니다!Serial + Syncvar numbers = [0, 1, 2, 3, 4] let dispatchQueue = DispatchQueue(label: "custom") print("Serial + Sync 실행결과") (0..

캐시 데이터 용량 표시 방식 개선하기: ByteFormatter
캐시 데이터 용량 표시 방식 개선하기: ByteFormatter프로젝트를 진행하며 이미지 캐시를 제거하는 기능을 개발하게 되었는데요.캐시 데이터 용량을 어떻게 표기할까 고민하다 너무 작지도 크지도 않도록 MB 단위로 표현하기로 정하고 byte를 1024 로 2번 나누어 MB로 변환하여 표기했습니다.하지만 코드리뷰를 진행하며 팀원분께 더 나은 방식을 배웠는데요.까먹지 않도록 정리해두려고 합니다!왜 ByteFormatter를 사용해야 할까?기존 방식에서는 용량을 항상 MB 단위로 표시했습니다. 이렇게 되면 GB 이상의 큰 용량을 표현하거나, KB나 Byte 단위의 작은 용량일 때는 어색해 보일 수 있습니다. 이를 개선하기 위해 ByteFormatter를 사용하면 Byte, KB, MB, GB 등 적절한 단위..

GCD 공식문서 읽고 정리하기
이 글은 공식문서를 번역해 나만의 언어로 작성한 글입니다.의역이나 오역이 있을 수 있으니 조심하세요! 😨개요GCD(Grand Central Dispatch)라고도 알려진 Dispatch는 macOS, iOS, watchOS 및 tvOS의 멀티코어 하드웨어에서 동시 코드 실행을 지원하는 체계적이고 포괄적인 개선을 제공하는 언어 기능, 런타임 라이브러리 및 시스템 향상 기능을 포함합니다.BSD 하위 시스템, Core Foundation 및 Cocoa API는 모두 이러한 향상된 기능을 사용하여 시스템과 애플리케이션을 보다 빠르고 효율적으로 실행하고 응답성을 향상시키도록 확장되었습니다.컴퓨팅 코어 수가 다른 여러 컴퓨터나 여러 애플리케이션이 경쟁하는 환경에서 단일 애플리케이션이 여러 개의 코어를 효과적으로 ..

Swift 6.0 접근제어자 Access Control
우선 우리가 잘 알고 있듯이 swift의 접근제어자는 다음과 같이 6개가 있습니다. 5개라고 알고 있는 사람도 많겠지만, Swift 5.9 부터 package 접근제어자가 추가되어 6개가 되었습니다.Swift는 코드 내의 엔티티에 대해 6가지 다른 액세스 수준을 제공합니다. 이러한 액세스 수준은 엔티티가 정의된 소스 파일, 소스 파일이 속한 모듈 및 모듈이 속한 패키지와 관련이 있습니다.접근 제어자open: 가장 높은 수준의 접근 제어자. 다른 모듈에서도 접근, 서브클래싱, 오버라이딩 가능// 모듈: ModuleAopen class Animal { open func bark() { print("으르렁") }}// 모듈: ModuleBclass Cat: Animal { over..