본문 바로가기

728x90

분류 전체보기

(104)
[SwiftUI] @State @State는 가변 데이터를 나타내는 속성 래퍼이다. @State를 변수 앞에 배치하면 SwiftUI는 해당 속성을 추적하고 , 상태가 변경될 때 마다 새로운 작업(뷰를 다시 그리는)을 할 수 있다. 이를 통해 뷰는 사용자 상호작용으로 데이터 모델의 변경에 즉각적인 UI업데이트 흐름을 만들 수 있다. @State var userTouchCount: Int @State 속성 래퍼가 사용되는 뷰에서 값을 변경하려면, 해당 뷰 내부에서만 변경해야 한다. 예를 들어 버튼이나 텍스트 필드를 통해 값을 변경하는 그런것이다. 일반적으로 아래와 같이 사용한다. struct ContentView: View { @State var myName: String = "" var body: some View { VStack() ..
Combine01 개요 Combine 프레임워크는 지정된 이벤트 소스에 대해 단일 처리 체인을 만들 수 있다. 체인의 각 부분은 이전 단계에서 받은 요소에 대해 고유한 작업을 수행하는 결합 연산자이다. 비동기 프로그래밍 begin var name = "Tom" print(name) name += " Harding" print(name) end -> 단일 스레드에서 실행되므로 결과가 항상 같음 --- Thread 1 --- begin var name = "Tom" print(name) --- Thread 2 --- name = "Billy Bob" --- Thread 1 --- name += " Harding" print(name) end -> 어떤 스레드가 먼저 실행될지 모르며 결과가 매번 달라질 수 있다. 애플의 비동기 프로..
Build/Archive 시 Codesign [키체인 접근/Framework] 엊그제 앱스토어 업로드를 위해 아카이빙을 하는데 framework에 대한 서명이 필요하다며 팝업이 발생했다. 보통 여기에 항상 허용이 있는데, 왜 안보이는지 잘 모르겠다. 어쨌거나, 항상허용 버튼이 없어서 급한대로 사용자 이름과 암호를 프레임워크의 수만큼(무려 수십개!!) 넣어주는 개고생을 했는데, 어찌저찌 검색을 통해 문제를 해결하긴 했다. https://developer.apple.com/forums/thread/92336
[RxSwift] Observable 객체에 이벤트/값 등을 추가 - 방출(emit) 가능 Observable을 구독(subscribe)하는 대상에게 이벤트를 방출한다. Observable은 Sequence와 같다. Observable Event의 3종류 Next: 구독자에게 이벤트를 전달 Completion: 구독자에게 완료를 알리고 Stream이 종료된다. Error: 구독자에게 에러를 알리고 Stream이 종료된다. Observable의 생성 Observable.create ( { observer -> Disposable in observer.onNext("1") observer.complete() observer.onNext("2") return Disposable.create() }).disposed(by: disposebag) /..
AppStore 화면 만들어보기 이러한 화면은 너무나 익숙할 것이다. 근데 이런화면 어떻게 만들지..? 다양한 방법이 떠오를 수 있다. 이번에는 ScrollView와 StackView 그리고 CollectionView의 조합으로 위와 같은 화면을 구성해 보고자 한다. 일단 필요한 라이브러리가 있다. 굳이 사용하지 않아도 되지만 편하게 UI구성을 하고 싶다면 SanpKit을 넣어주자. 방법은 아래 링크 참고 2021.10.29 - [앱 개발 도움 링크/Libraries(Github...)] - [iOS] SnapKit 사용법 [iOS] SnapKit 사용법 🤔왜 이걸 쓰지? 개발 시 스토리보드를 사용하여 화면의 UI를 구성할 수도 있지만 Autolayout을 코드로 작성하는 방법도 있다. NSLayoutConstraint를 직접 지정해주..
HomeBrew설치 그리고 실패 HomeBrew? macOS용 패키지 관리자임. 설치만 하면 간단한 리눅스 명령어를 통해 애플리케이션을 설치 할 수있다. Homebrew The Missing Package Manager for macOS (or Linux). brew.sh 설치하기 명령어의 오른쪽 복사하기 버튼을 눌러서 복사하고 Terminal에서 붙여넣기 Enter! 맥 비밀번호를 입력하라고 나오면 입력하고 엔터, 엔터! 다 되었으면 terminal에서 brew버전을 확인해보자. brew --version Warning: /opt/homebrew/bin is not in your PATH. Instructions on how to configure your shell for Homebrew can be found in the 'Nex..
COW(Copy On Write) 원본 또는 복사본이 수정되기 전까지 복사를 하지 않고 원본 리소스를 공유하는것. 수정이 일어날 경우, 그때 복사하는 작업을 함 Swift에서는 CollectionType을 복사해서 사용할 때 발생한다. : Array/ Dictionary/ Set 아래 코드를 보자 var array1 [Int] = [1, 2, 3, 4] var array2 = array1 Array는 구조체이다. array2는 array1을 할당했으니 array1의 값이 array2에서 복사되어야하는데. 그렇다면 array1과 array2는 서로 다른 주소를 갖고 있어야하는것이 맞다. 그러나 cow는 바로 복사하지 않는다. array2에서 수정이 발생하지 않은 경우 array2도 array1의 주소를 참조하고 있는 형태가 된다. 또는 원..
Global DispatchQueue의 QoSClass GCD는 동시 작업을 관리하기 위한 저수준 API다. 계산 비용이 많이 드는 작업을 백그라운드에서 실행시키고 앱의 응답성을 개선하는데 도움이 된다. GCD는 내부적으로 공유 스레드풀을 관리한다. GCD를 사용하면 코드블럭이나 Task 항목을 디스패치 큐에 추가하고 GCD는 이를 실행할 스레드를 결정한다. GCD는 시스템 및 사용 가능한 시스템 리소스에 따라 필요한 병렬 처리량을 결정한다. 대기열 이해 GCD는 디스패치큐 에서 작동한다. 이 대기열은 작업단위를 제출하면 FIFO 순서로 실행한다. 디스패치큐는 스레드로부터 안전하므로 여러 스레드에서 동시에 액세스할 수 있다. 대기열(큐)은 직렬과 동시가 있다. 직렬큐는 주어진 시간에 하나의 작업만 실행되도록 보장하며, 한 작업이 끝나고 다음 작업이 시작되기까..
NSCache 캐시? 사용한 자원을 재사용이 가능하게 특정 영역에 저장해 놓는것을 의미한다. 쉽게 볼 수 있는 캐시는 웹 이미지를 다운로드 한 후 캐시하는것이다. 캐시를 하게 되면 다시 다운로드하면서 데이터를 소모하지 않더라도 저장된 캐시이미지를 불러와 볼 수 있게 된다. 캐싱의 종류는 크게 둘로 나눈다. Memory Caching 과 Disk Caching 메모리 캐싱은 메모리 영역의 일부분을 캐싱에 사용하는것이다. 메모리는 애플리케이션이 종료되면 사용중이던 메모리 영역을 반환하게 되므로 앱 종료와 함께 캐싱된 정보도 사라지게 된다. 반면 디스크 캐시는 데이터를 파일 형태로 디스크 영역에 저장하는것으로 애플리케이션을 종료해도 저장한 정보가 사라지지 않는 장점이 있지만 애플리케이션의 전체 용량이 증가한다는 단점이 존재..
ARC(Auto Reference Counting) Swift는 Auto Reference Counting 으로 앱의 메모리를 관리한다. ARC는 참조유형인 클래스나 클로저에 적용되며 구조체나 열거형은 참조유형이 아니므로 추적하지 않는다. 클래스 인스턴스는 heap메모리 공간에 동적으로 할당한다. 이것을 관리하기 위해서는 heap영역에 참조형 자료들이 얼마나 참조되고 있는지 카운팅 하고 이에 따라 메모리를 할당 및 제거하면 된다. ARC는 인스턴스가 더 이상 필요하지 않을 때 클래스 인스턴스에서 사용하는 메모리를 자동으로 해제한다. 간단한 코드를 보며 ARC의 RefCount를 어떻게 관리하는지 이해해보자. class Person { let name: String init(name: String) { self.name = name print("\(name..

728x90