- 메모리관리(weak self와 guard의 만남)2료일기본 개념인 weak, unowned에 대한 자세한 설명은 스킵하겠다. 여기서 다룰것은 언제 그래서 메모리누수가 생기고 댕글런포인트가 뭐고 언제 댕글런포인트가 발생할 수 있을지, weak self는 언제써야하는지.. 등 좀더 실무적인 개념에서 다뤄보려 한다.weak self를 사용하게 되면 ARC가 1증가하지 않는 약한참조이지만 값이 있을수도 있고 없을수도 있어 guard let같은 옵셔널 binding을 사용하여 코드에 사용해야한다. @escaping & nonEscapingnonescaping 클로저가 범위 내에 실행되어, 코드를 즉시 실행하며 나중에 저장하거나 실행할 수 없다@escaping 클로저는 저장 될 수 있고, 다른 클로저로 전달될 수 있으며 미래의 어느 시점에서 실행 될 수 있다.딜레이가..
- 2025-01-12 20:27:12
- Hash-Hashable을 곁들인2료일사실 이건 기본중의 기본이다. 이미 알고리즘을 풀며도 사용하고 개발을 할때도 이미 많은 곳에 포함되어있다. 하지만 내 블로그에는 따로 정리를 해놓은 적이 없어 딥다이브로 파고들 생각이다. 자 들어가자해쉬🌞Hashing은 임의의 각각 크기를 가진 입력 데이터를 고정 크기의 값으로 변환하는 과정으로, 이를 해시 함수(Hash Function)가 담당한다. 이 과정에서 생성된 출력값은 해시 값(Hash Value) 또는 해시 코드(Hash Code)라고 한다원본 데이터인 키값을 저 hash function을 통해 64 bit의 int형으로 변환한 것을 확인 할 수 있다. 일반 적으로 키 값이 동일하면 해쉬결과값도 동일하게 나온다. Hash Function를 통해 어떠한 값이 들어오건 정해진 자료내의 결과값으..
- 2025-01-05 16:01:27
- Image(Pixel, asset, memory....)등등을 포함한 & HIG2료일ㅇ이번글은 단순히 UIImage, Image를 말하는 게 아닌 더 딥한 정보들을 정리할 계획이다. 먼저https://developer.apple.com/design/human-interface-guidelines/images Images | Apple Developer DocumentationTo make sure your artwork looks great on all devices you support, learn how the system displays content and how to deliver art at the appropriate scale factors.developer.apple.com 우선 이미지는 두가지 방식으로 구성된다.래스터 이미지: 픽셀로 이루어져 해상도가 고정되어 있어 확..
- 2024-11-24 15:31:54
- SilentPush&RichPush2료일What is SilentPush?- 백그라운드에서 앱 업뎃하기 즉 유저가 느끼지 못하게 앱 내에서 정보를 업뎃해야할 때 사용한다. 내가 개발하는 앱에서는 해당 날짜의 여행이 있을때 silentPush로 상태 변화를 위해 사용했다. 기존의 코드에서는 매일 24시간마다 백그라운드에서 allFetch를 통해 여행이 있는지를 체크해주었지만 이는 여행이 없더라도 매일 백그라운드에서 업뎃을 하기에 비효율적이라고 판단했다.Silent Push 페이로드에서는 3가지가 값이 추가로 있어야 가능하다고 한다. "content-available": 1, "apn-push-type": "background","apn-priority": 5apple developer에 보면 이 푸쉬는 우선순위가 낮아 짧은 시간에 노티피케이션 ..
- 2024-11-08 02:59:34
- test Code (with TCA)2료일TCA의 테스트코드 적용을 살펴보기 전에 먼저 TestCode에 대해 생각해보고 가려한다. 어디까지 짜야하고 어디까지 커버리지를 올려야하는가..에 관한 얘기가 될수 있을거같다.먼저 Unit Test와 UITest가 있다. Unit test : 특정함수, 메소드 동작 테스트(로직테스트) => 전체프로그램을 빌드하는대신 유닛단위로 빌드해 시간절약UI test : UI and UI actionUnit test1. import XCTest( Test는 XC framework를 기반으로 이루어져 있음)2. class 는 XCTestCase를 상속받음. 3. setUpwithError() 테스트 각각의 항목이 실행될 때 테스트. 테스크 클래스가 갖고있는 각각메소드가 실행될때 이게 한번씩 실행4. 위와 반대로 테스..
- 2024-11-04 15:10:47
- CLMonitor2료일위치나 비컨을 통해 조건에 모니터링 하는 API이다.사실상 너무 간단하다. 사용법은 위와같이 원하는 이름의 CLMointor를 만들어주고 조건을 걸어준 후 이벤트를 기다린 후 이벤트에 달성하면 원하는 동작을 해주면 된다. Easy하지만 어떻게 구현되어있는지를 살펴보자 swift의 최상위 액터이다. CLMonitor 인스턴스는 각각 하나의 모니터링 작업에 대한 "게이트웨이" 역할을 한다. CLMonitor는 액터로서 설계되었기 때문에, 여러 스레드가 동시에 같은 인스턴스에 접근하려 할 때도 액터 자체가 이들을 직렬화하여 안전하게 처리할 수 있다. 이로 인해 추가적인 동기화 메커니즘이나 스레드 관리에 신경 쓸 필요가 없어지며, 동시성에 대한 걱정 없이 비동기적으로 작업을 수행할 수 있다.그래서 위에서 본 것..
- 2024-10-22 10:05:03
- Swift Performance-wwdc242료일https://www.youtube.com/watch?v=nb3bRQa0iGQ&t=3s 1. 성능이 뭔데?- 지연, 에너지 소모, 메모리 관련들이 섞여 영향을 주는 것. 2. 낮은 수준의 성능을 볼 때 고려해야할 원칙들 bottom-up으로 생각을 해보자- 최적화되지 않은 함수 호출들: 4가지의 cost가 있다고 한다. 이 중 3가지는 우리가 하는것. 1. 먼저 호출에 의한 인수를 설정(arguments)가장 낮은 수준인 1번은 우리가 함수를 호출할때 인수를 넣어야한다. 최신 프로세서에선 이러한 비용이 레지스터 이름변경으로 숨겨진다. 그래서 뭐 고려할껀 없다. 2. 호출하는 함수의 주소 확인 좀 더 높은 레벨에선, 함수의 컨벤션에 맞게 컴파일러가 값의 복사본을 추가해야할 수 있다. 3. 함수의 ..
- 2024-06-17 17:17:32
- 힙메모리 분석 - WWDC242료일이 글은 https://www.youtube.com/watch?v=X_JYRz-Hd0o유튜브의 wwdc24영상을 다 챙겨보면서 이건 정리할 필요가 잇따고 생각을 하여 정리를하고 있슴다.앱이 시작하면 가상메모리의 빈 주소 공간을 얻는다. -> 앱이 시작 되면 시스템이 Main Executable, 연결된 라이브러리들을 로드하고 디스크의 읽기전용 리소스 영역에 매핑한다. -> 앱이 실행되면 각 스레드의 로컬 및 임시 변수저장에 대한 스택영역도 사용이 가능해진다. 동적 메모리는 힙이라는 공간에 저장된다.힙힙은 하나의 메모리블록이 아니라 multiple 가상 메모리 영역으로 구성된다. 각 영역들은 개별 할당으로 구분된다. 내부적으로 16KB메모리 페이지로 구성되어있다. 총 3가지 상태가 있는데, 아직 기록되..
- 2024-06-15 14:15:29
- Uniform type Identifiers2료일ex)ipad에 내 셀카를 찍어서 데스크톱에 넘기면 그건 파일을 넘기는 것이다. 그 사진을 열고 싶을때? 더블클릭해서 프리뷰를 연다. 어떻게 컴퓨터는 이게 이미지인지 알고 처리했던건가? 요것이 뭐 텍스트 파일일수도 있고 영상일수도 있는데 어떻게 이미지인지 알았던거야!!! 🤔🤔 궁금하지 않나요?컴퓨터에서 파일은 바이트의 연속적인 시퀀스로 표현된다. 유형을 알때 설마 내부의 바이트를 다 읽어서 확인할까? 그렇게 비효율적이지 않다. 컴퓨터 운영체제는 파일의 유형을 알아내기 위해 주로 파일 경로의 확장자를 사용한다.맥에서는 안보이지만 .jpeg가 숨어있는 것.웹 환경에서는 파일 경로 확장자만으로 파일을 식별하지 않고 MIME(Multipurpose internet Mail Extension)로 표준화된 방식..
- 2024-04-18 20:21:17
- 매크로(Macros)2료일잉? 나는 따로 구조체에서 Init을 선언해주지 않았는데 뜨네?이게모지? memberwise initialization 이는 컴파일러가 자동으로 init메서드를 생성해주기 때문이다. 그렇다면 만약 WhatisMacro에 어떤 프로퍼티도 추가해주고 야 이것도 자동 컴파일러가 하게 해줘! 🍎음...비효율적인데? 물론 swift compiler는 오픈소스야 잠만. 우리회의해보자... 🧑🏼💻어? 그럼 일일이 너네랑 회의해야해? 확장서 개그지같네;; 그래서 나온놈이 매크로다! 🧑🏼💻얘가 원하는데로 컴파일러를 수정하지 않고 Swift Package로 배포하는 방법! 매크로 어떻게 선언하는데? public macro OptionSet() = #externalMacro(module: "SwiftMacros", ty..
- 2024-03-07 15:09:19
스킨 업데이트 안내
현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)