- TaskGroup2료일TaskGroup뭐 간단한 병렬실행이면 async let을 써주면 된다. 하지만 이게 수없이 많다면? async let 계속쓸래??또한 static하게 결정된 task에서만 쓸수 있다. 왜? 우리가 async let 으로 다 일일이 해줘야하기에!!만약 모든 이미지를 가져와야하는경우 필요한 개수를 미리 알수 있을까?⇒ nono 그건 컴파일시점에 알수 있는것이 아닌 런타임 시점에 알수 있다.런타임때마다 달라질수 있는 child Task들을 동적으로 만들어줄수 있다!! 😆 😆 😆Taskgroup을 만들기 위해서는 withTaskGroup(of:returning:body:)를 호출!throwing taskgroup → withThrowingTaskGroup(of:returning:body:) 에러던질때! ..
- 2023-08-13 20:01:28
- Fastlane - CI를 해보자2료일What is Fastlane? 배포를 자동화하기 위한 오픈소스 라이브러리brew install fastlanefastline init //프로젝트 있는곳에서 해야함Appfile : 앱의 번들 ID, app ID, team ID 정보가 담겨있음. Fastfile : 배포와 관련된 자동화 명령어들이 담겨있음. Gemfile : gem 목록 Gemfil.lock : 의존성 버전 관리를 위한 정보가 담겨있음.fastlane의 명령어는 fastfile에서 ruby언어를 사용하여 세팅. 앱 배포와 개발을 위한 certificate(개발자가 Apple) & provisioning profile(디바이스가 앱을 신뢰할수 있는지)을 등록하는데 두가지방법으로 도와준다.1. match : 개인키와 인증서를 git 레포에 ..
- 2023-08-09 20:18:47
- Swift Concurrency - Async/Await⭐️2료일GCD의 문제점Thread Explosion : 내가 쓰레드들을 만들수 있어서 수많은 쓰레드속에서 switching이 필요하다. 우리가 왜 쓰레드를 만들었지? 프로세스 context swiching 때문에. 그런데 쓰레드가 너무많이생기면 문제. CPU는 이전 쓰레드에서 새 스레드로 전환하려면 전체 쓰레드 컨텍스트 스위치 해야함.memory overhead: 블락된 쓰레드는 재실행을 기다리는 동안 메모리, 리소스를 가지고 있다->불필요한 메모리 점유Priority inversion: Qos(Quality of Service)는 특정 작업의 우선순위를 높이면서 다른 낮은 우선순위의 작업을 방해할 수 있다. 예를들어, 중요한 UI작업이 낮은 우선순위백그라운드작업에 의해 지연될 가능성있다.비동기 코드가 실행되면..
- 2023-08-08 04:58:38
- ARFaceTrackingConfiguration()2료일1. 먼저 기기에서 지원을 확인을 하는지 Appdelgate에서 확인을 한다. if !ARFaceTrackingConfiguration.isSupported { DispatchQueue.main.asyncAfter(deadline: DispatchTime.now()) { let alert = UIAlertController(title: "Unsupported Device", message: "This app requires TrueDepth Camera with iOS 11.0+", preferredStyle: .alert) alert.addAction(UIAlertAction(title: "Close", style: .default) { action in exit(0) }) self.window?.ro..
- 2023-07-12 03:55:01
- Combine3-Cancellable2료일Combine을 공부하다보면 Cancellable이라는 프로토콜을 자주 만나게 된다. 먼지도 모르고 그냥 쓰는 것은 내가 제일 싫어하는 것이기에 공부 바로 시작Cancellable"A protocol indicating that an activity or action supports cancellation."취소를 지원하는 활동 혹은 액션을 나타내는 프로토콜..? 이거 보고 이해하는 사람 있나여? 일단 나는 아님Combine에선 이벤트 스트림을 action이라하는데 이 것을 취소할수 있는 프로토콜이라고 한다.public protocol Cancellable { func cancel()}실제로는 구독의 라이프사이을 관리하는 매커니즘을 제공합니다.구독을 취소하면?:- 퍼블리셔는 더 이상 값을 생성하지 ..
- 2023-07-09 16:41:52
- Combine(1)-WhatisCombine(publish&subscirbe)2료일Combine: 반응형 프로그래밍반응형프로그래밍이란?데이터 흐름과 변화의 전파에 중점을 둔 프로그래밍 패러다임비동기처리에 X비동기코드의 선언적 접근 O코드 간소화 O🔑 핵심: Combine은 비동기 이벤트를 처리하기 위한 도구가 아니라, 비동기 코드를 선언적으로 접근하여 코드의 가독성과 유지보수성을 향상시키는 프레임워크입니다.기존에는 RXSWIFT를 사용했다. 하지만 써드파티로서 외부 라이브러리이기에 프로젝트 설정이 별도로 필요햇다하지만 Combine은 애플에서 만든 프레임워크로내장되어있어 빌드 시간, 유지보수 시간을 줄이고 Apple 생태계에 더 잘 통합되어있다 코드를 쉽게 읽고유지관리할수 있따!!RXswift제대로 아직 공부못햇지만 combine으로 할수 있다. 더 좋음 왜? 퍼스트 파티라서.시간..
- 2023-07-09 16:41:41
- lazy var2료일Lazy var 그게 몬데? 그냥 private var 이나 쓰면 되지 굳이 이런걸 왜써? 이렇게 생각하면 안댐 직독직해 게으른 변수는 매우 swift에서 메모리적으로 효율적이게 도와준다. 처음 사용되기전까지 연산이 되지 않기에!! 그럼 두번째부턴? 뭐가효율적? 이 그림하나로 lazy var를 어떻게 쓰는지는 완벽하게 설명이된다. computed Property랑 뭐가 다를까? 바로 처음 사용될때 메모리에 올리고 그 후부터는 그냥 메모리에 올라온값사용! 연산프로퍼티는 사용할때마다 연산을 한다 장점 - 뷰 로드될때 모든 인스턴스를 올린다면 메모리 과부하를 막을수 있다 와 그렇다면? 그냥 모든 규모 큰 변수들을 lazy 처리하게 된다면 앱의 안정성과 효율성은 짱짱 좋아지는 거 아냐? 당연히 ㄴㄴ~! - 여러..
- 2023-07-07 10:43:05
- 디스패치 그룹2료일iOS 개발에서 비동기 작업을 그룹화하고 실행을 제어하는 방법은 매우 중요하다. 여러 개의 비동기 작업이 동시에 실행될 때 작업이 언제 끝나는지 감지하고 후속 작업을 실행해야 하는 경우가 많다. 이때 DispatchGroup과 DispatchSemaphore가 유용하게 쓰인다.1. DispatchGroup(1) DispatchGroup이란?DispatchGroup을 사용하면 여러 개의 비동기 작업을 그룹화하여 해당 그룹의 모든 작업이 끝났을 때 특정 코드를 실행할 수 있다.이것을 활용하면 예를 들어 런치스크린 이후 첫 화면을 로딩할 때, 모든 필수 리소스(이미지, 데이터)를 다 받은 후 UI를 업데이트할 수 있다그룹1의 작업이 여러쓰레드에서 작업을 해도 묶여있고 마지막 task가 끝나는 시점을 알 수 있..
- 2023-07-02 12:54:47
- GCD queue.2료일아이폰에는 여러개의 쓰레드가 있다. 왜 버벅이냐? 일하는 녀석이 여러개가 있어도 한놈한테 야 너 다해! 이러면 아 할게 너무많아....하면서 과도한 작업이 몰려 버벅인다.특히나 메인쓰레드는 UI 업데이트와 사용자 이벤트 처리 등의 핵심 작업 수행하는 쓰레드로 블락되면 사용자경험이 나빠진다.=> 다른 쓰레드로 작업을 분산하면 되겟다~ 매우 간단!(작업 분산처리)그러면 어떻게 분산할껀데 ? iOS에서는 Task를 대기행렬(큐)에만 보내면 된다. 그러면 알아서 OS가 한다.그러면 작업을 큐에만 보내면 되겟네? 내가 할 것은 오직 큐에만 보내자!!! 직접적으로 쓰레드 관리 X, 큐에 넣으면 알아서 작업을 분산처리. 쓰레드보다 더 높은 차원에서 일을 한다고 보면됨. 비동기적 대기행렬(큐)에는 두가지 있다. GC..
- 2023-07-02 01:45:22
- Actor🕴🏻2료일- What is Data Race?두 스레드가 동기화 없이 동일한 객체에 접근하려 할때 ⇒ Data race이벤트 순서가 프로그램의 정확성에 영향을 미칠때 ⇒ Race Conditionex) Thread별 연산의 실행 순서에 따라 값이 달라질 수 있다! 고로 Data Race≠Race conditionclass MyDataManager { static let instance = MyDataManager() private init() {} var data: [String] = [] func getRandomData() -> String? { self.data.append(UUID().uuidString) print(Thread.current) r..
- 2023-06-29 13:58:39
스킨 업데이트 안내
현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)