본문 바로가기
반응형

iOS67

[iOS] 왜 메인스레드에서만 UI 업데이트를 할까? 서론iOS개발을 하다보면 UI 업데이트 관련 로직은 main thread에서 작업을 해야한다는것을 알것이다. 비동기 작업을 하면서 UI업데이트 시, 당연스럽게 메인스레드에 작업을 지정하며 넘어갔다. 문뜩 왜 메인스레드에서만 UI 작업을 해야할까? 라는 의문이 들기 시작했다.메인스레드보다 백그라운드 스레드에서 하는게 더 좋지 않을까? 짚고 넘어가야할 개념 Thread-safe멀티 스레드 프로그래밍에서 일반적으로 어떤 함수나 변수, 혹은 객체가 여러 스레드로부터 “동시에” 접근이 이루어져도 프로그램의 실행에 문제가 없음을 의미한다.UIKit은 기본적으로 Thread Safe하지 않다. UIKit과 같은 매우 큰 프레임워크에서의 모든 속성들을 Thread-Safe 하게 설계하는 것은 엄청 비현실적이기에 Ser.. 2024. 5. 28.
[Swift] inout 파라미터 inout 파라미터는 무엇이고, 언제 사용할까?일반적인 Swift함수의 파라미터는 상수이다. 고로, 변경될 수 가 없다.그러나, inout파라미터를 사용하면 함수내에 직접 변수를 변경하겠다는 의미로 사용된다. inout 파라미터는 Swift에서 함수가 호출될 때 해당 파라미터를 수정할 수 있도록 허용하는 기능이다.inout 키워드를 사용하면 함수 내부에서 파라미터를 수정할 수 있으며, 수정된 값이 함수 호출 이후에도 유지된다.func addOne(inout num: Int) { num += 1}var myNum = 5addOne(num: &myNum)print(myNum) // 출력: 6inout 원리함수가 호출되면 매개변수로 넘겨진 변수가 복사된다.함수 몸체에서 복사한 값을 수정한다.함수가 .. 2024. 5. 28.
[AppStore 배포 이슈!] ITMS-91053: Missing API declaration 2023년 가을부터 Apple 필수 API를 사용하는 앱을 App Store Connect에 업로드할 때 이메일을 받게 된다. 해당 API 사용 이유를 앱의 PrivacyInfo 파일에 설명하지 않으면, 2024년 5월부터 앱이 통과 되지 않는다. 앱 또는 제3자 SDK가 사용하는 Apple 필수 API의 각 카테고리에 대해, 앱 또는 제3자 SDK의 PrivacyInfo 파일에 있는 NSPrivacyAccessedAPITypes 배열에 추가해야 한다. 해당 내용의 메일을 받은 사람들이 많은 것 같다. 나 또한 처음 메일을 받고 어? 싶었지만, 별거 아니였다. ㅎ.ㅎ cmd + n 파일추가 눌러서 privacy를 검색하면 바로 나올것입니다. 프로젝트 파일에서 PrivacyInfo.xcprivacy를 생성.. 2024. 3. 22.
[Swift] Generics 제네릭 Generics타입에 의존하지 않는 범용코드를 작성할 때, 사용제네릭을 사용하면, 중복을 피하고 코드를 유연하게 작성할 수 있다.Swift의 강력한 특징 중 하나이고 Swift 표준 라이브러리 대부분은 제너릭 코드로 되어 있다예를 들어 Swift의 Array 와 Dictionary 타입은 둘다 제너릭 콜렉션Int 값을 가진 배열, 또는 String 값을 가진 배열 또는 실제로 Swift에서 생성될 수 있는 다른 모든 타입에 대한 배열을 생성 가능 모든 지정된 타입의 값을 저장하기 위한 딕져너리를 생성할 수 있고 해당 타입에 대한 제한은 없다. Generic Function제너릭이 해결하는 문제아래와 같이 일반적으로 a 와 b 가 같은 타입이 아니면 바꾸는 것은 불가능하다. Swift는 타입 안정성 언어이.. 2023. 12. 13.
[RxSwift] RxCocoa (binding, Traits, Driver..등) RxCocoa RxCocoa란 기존 Cocoa Framework에 Rx기능을 합친 RxSwift기반의 라이브러리 RxSwift와 별도로 추가해주어야 사용할 수 있다 RxCocoa는 단방향성을 갖고 있다 Producer는 값을 생성하고, Consumer는 값을 처리 한다. ObserverType, ObservableType observableType : 값을 관찰할수 있습니다. observerType : 값을 주입시킵니다. Binding 데이터 생산자와 소비자가 존재( 생산자 = Observer, 소비자 = UI Component) 생산자가 생성한 데이터를 소비자에게 전달하고 소비자가 데이터를 소비한다 Binder 소비자 역할 observerType Observable이 아니기 때문에 구독자 추가 X Er.. 2023. 11. 4.
[RxSwift] Erro 처리 catch, retry 연산자 OnError 로 처리하면 되지 않낭? Error 이벤트는 Observable 을 종료시키게 된다. 그래서 종료시키지 않고 다음과 같이 이벤트를 발생키시고 completed 가 발생되도록 error handling 을 하고자 하는 것이당! RxSwift 에서는 보통 세가지 방법으로 Error Handling 을 할 수 있다. catch : 특정 값으로 Error 복구 retry : 재시도 하기 materialize / dematerialize : Sequence 를 제어해서 처리 Catch Catch연산자는 Next와 Completed 연산자는 그대로 방출한다. API 요청 코드에서 Catch가 많이 사용된다. Error이벤트가 전달되면 새로운 Observable을 전달한다. 네트워크 에러가 있을 경우,.. 2023. 10. 31.
반응형