일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- 오블완
- modern concurrency deep dive
- modern concurrency
- 티스토리챌린지
- APNS
- WWDC
- 야곰 # 야곰아카데미커리어스타터캠프 #iOS개발자 # 부트캠프
- ios
- SWIFT
- Today
- Total
목록SwiftUI/지식 창고 (14)
Geon
Macro tests- test를 통해 매크로의 에러 여부를 파악할수 있다.let testMacros: [String: Macro.Type] = [ "SlopeSubset" : SlopeSubsetMacro.self,]final class WWDCTests: XCTestCase { func testSlopeSubset() { assertMacroExpansion( """ @SlopeSubset enum EasySlope { case beginnersParadise case practiceRun } """, ex..
Swift MacrosSwift 매크로를 사용하면 컴파일 타임에 반복적인 코드를 생성하여 앱의 코드베이스를 더욱 표현적이고 읽기 쉽게 만들수 있다.public struct StringifyMacro: ExpressionMacro { public static func expansion( of node: some FreestandingMacroExpansionSyntax, in context: some MacroExpansionContext ) -> ExprSyntax { guard let argument = node.argumentList.first?.expression else { fatalError("compiler bug: the m..

Swift5.9 부터 좀더 쉽게 Observation을 할 수 있다.@Property Wrapper를 3가지로 단순화하여, 고려해야할 옵션이 적어지기에 새로운 기능을 작성하는데 더 쉽게 추론할수 있기에 도입되었다.@Observable 매크로를 사용하면 성능상의 이득이 있다.@EnvironmentObject 는 없어지고 @Environment로 대체되었다.@Binding 대신 Bindable로 변경되었다.@ObservableObject 대신 추적해야할 변수에 @Observable로 표기, view에서는 var로 변경가능위 사진은 언제 어떤 프로퍼티 래퍼를 써야할지에 대한 표기 @Observable Macro를 사용했을때의 예시 코드@Observable class Donut { var name: Strin..

SwiftUI 렌더링 과정꼭 필요한경우에만 업데이트 해야한다.종속성을 줄여야한다.Self.printChanges() 를 통해 View가 무엇때문에 변경되는지 확인가능SwiftUI 렌더 과정View ValueDynamic property updateUpdated View Value종속성 줄여야하는 이유 (1)종속성 줄여야하는 이유 (2) view에 새로운 값 생성- 저장된 모든 프로퍼티에 값을 할당(dogs, 동적 프로퍼티등)SwiftUI는 View의 동적 프로퍼티를 모두 업데이트 해 동적 프로퍼티의 값을 그래프에 있는 값으로 바꿈업데이트 한값을 이용해 body가 실행되며 View의 자식을 생성한다.이 과정을 반복하며 View가 업데이트 된다. 모든 View가 업데이트 되는것이 아닌 값이 새로 바뀌거나 종..

Hitch- 히치란 앱에서 스코롤이나, 버튼을 탭했을때 자연스러운 연결을 위해 애니메이션이 적용되는데 이떄 애니메이션이 자연스럽게 안나올떄를 의미한다.- 장애는 프레임이 예상보다 늦게 화면에 나타날떄 발생- 렌더 루프가 제 시간에 프레임을 완료하지 못하면 버벅임 발생 Render Loop(Event -> Commit -> Rnder Prepare -> Render execute -> Display)- 앱은 터치이벤트를 처리하고 UI에 변경이 필요한지 결정(Event)- 커밋단계에서는 앱은 UI업데으이트하고 렌더링을 위해 렌더링 서버에 제출(Commit)- 렌더서버는 렌더링할수 있게 준비하고, 렌더 실행단계에서는 UI를 그리고 다음 VSync에서 프레임이 사용자에게 표시될수 있도록 한다. - 커밋 히..

UIImage 처리방식은 크게 Load, Decode, Render 세가지 프로세스가 존재한다.Load: 압축된 이미지 (PNG, JPEG)을 메모리에 로드 하는 단계Data Buffer 란이미지의 크기를 설명하는 메타 데이터, 이미지 데이터 자체(JPEG 또는 PNG 형식)가 저장되어 있다.서버에서 받은 이미지(인코딩된 데이터) 이다.데이터 버퍼는 각 픽셀들이 가진 색상과 투명도가 없이떄문에 Frame Buffer로 바로 변환이 불가능하다.Decode: JPEG, PNG파일을 GPU가 읽을수 있게 디코딩 작업을 하는 프로세스이다. 이 단계에서는 이미지 파일들을 압축을 해제하며, Image Buffer로 디코딩 하는 단계이다.Image Buffer란이미지의 메모리를 표현하는 Buffer이다.이미지의 단일..