안녕하세요. 10강 내용 중 8분 40초 즈음에 Task 가 여러 개일 경우 '동일 시점에 여러개의 쓰레드에서 접근/사용 가능성이 있기 때문에' Race Condition이 발생할 수 있다고 설명해주셨는데요. 교재 10p에서 'Task는 현재 실행중인 컨텍스트의 메타데이터를 그대로 상속해서 사용'한다고 설명하고 있고, 메타데이터에는 '실행 액터'도 포함되어 있어서(현재 시점에서는 액터를 쓰레드와 비슷한 의미로 이해하고 있습니다.) , Task 클로저 외부와 내부의 액터(~= 쓰레드?)는 같을 것 같은데요. 이로 미루어 봤을 때, Task 1과 Task 2의 클로저가 실행되는 쓰레드도 같아야 할 것 같다는 생각이 들더라구요. (swift 6모드에선 비동기 컨텍스트에서 Thread.current에 접근할 수 없어 swift 5 모드로 실행했습니다.) 간단히 테스트 해봤을 때 위처럼 두개의 Task의 클로저가 실행되는 쓰레드가 메인 쓰레드로 같은데요. 이는 test() 메서드가 MainActor에서 실행되기에(@MainActor) 이와 같은 쓰레드에서 실행되는 것으로 이해했습니다. 제가 잘못 이해하고 있는 지점이 있을 것 같은데요. 뒷 내용을 아직 듣지 못했지만 참지 못하고 질문드려봅니다! ㅎㅎ 답변해주시면 감사하겠습니다!
안녕하세요, 강의를 들으면서 생긴 질문 세가지가 있습니다. 답변해주시면 너무 감사드리겠습니다. Swift Concurrency에서 NSLock을 사용해도 되나요? 이전 GCD환경에서 데이터 동기화를 위해 사용하던 NSLock을 Swift Concurrency환경에서 사용해도 같은 효과 를 볼수있을지 궁금합니다. Actor에 접근할때는 await으로 Task를 따서 비동기적으로 접근하는데, 기존에 비슷한 참조타입인 class에 접근하는것보다 속도가 느려지는 이슈 는 없을까요? cpu에서 context switch를 하면, 저장하고 로딩하는 동기화하는 작업때문에 컨텍스트 스위칭이 비효율적이다 라고 설명해주셨는데, 그럼 swift concurrency에서는 task가 다른 cpu(다른 쓰레드) 에서 재개되는것도 동기화작업 이 필요할텐데 이 작업은 비싼(?) 비효율적인 작업이 아닌가요? 질문이 조금 많은데.. 액터까지 강의 들으면서 궁금했던 점이라 부탁드립니다.
안녕하십니까? 강사님 강의를 열심히 듣고 있는 중입니다. 363강 Step #29 - Timer를 실습하던중 의문점이 생겨서 문의 드립니다. 30초에 타이머가 일시정지하게끔 하거나 중지시키게 하면 항상 2-3초의 오차가 발생합니다. 이게 소스상의 문제인지 아님 다른 문제인지 알수가 없어서 문의 드립니다.
안녕하세요 특정 코드에 대한 질문이 아니라 코드 설계에 대해 궁금한 점이 있습니다. 해당 프로젝트에서는 FeedView를 방문할 때 마다 'loadAllPosts'를 통해서 데이터를 가져오는데 이렇게 하면 비용적인 측면에서 문제가 되지 않을까요? 현업에서도 매번 이렇게 Read를 하는지 아니면 Cache를 사용하는지 궁금합니다.
Ui 설정에서 Text. Label에서 add new constrain을 설정하는데, top, leading, height 등을 설정할 때 어떤 거는 top, leading만 설정하고 다른 것은 top, leading, trailing 등을 설정하는데 이유가 무엇이고 그러한 설정을 하는 기준이 무엇인지 궁금합니다!
안녕하십니까? 강사님. 357강을 실습하는 도중에 문의가 있어 질문드립니다. 개발하는데는 큰 이슈가 아니지만 나름 즉각적인 개발결과를 확인하는데는 필요할거 같아 문의 올립니다. 제가 Xcode 16.4를 쓰고 있습니다. 강의에서 언급하신 내용대로 코드를 해도 live view가 보이지 않습니다. 제가 뭔가를 놓친것인지 궁금해서 문의 올립니다.
Movie App_4 강의 11:08초 화면 보시면 dataTask 내에 클로저 부분에서 return을 주면 dataTask의 클로저만 끝나는거 아닌가요? 제가 이해한대로 해석한다면 dataTask 클로저 내에 있는 completion 클로저가 실행 된 뒤 return으로 인해 dataTask클로저가 종료되고, 그 이후 메인스레드에 작성 해 놓은 completion(nil) 또한 실행 되어서 총 두번 실행 되는게 아닌가요?? 그리고 dataTask는 비동기 처리로 인해서 completion(nil)이 먼저 실행되고 그 다음에 dataTask내에 있는 클로저가 실행 될 수도 있지 않나요? 어렵네요
안녕하세요 강의 수강 후 실무에서 잘 활용하고 있으나 고민이 있어서 글씁니다. 실제 실무에서는 보안솔루션이 설치되어 있고 난독화가 되어 있어서 강의 내용만으로는 루팅탐지나 프리다탐지 등을 우회하여 진단하기가 어렵습니다. 그리고 코드 패치 등으로 파일을 변조하면 무결성 탐지를 하기도 하구요. 그래서 질문입니다. 중급자를 위한 강의 말고 고급자를 위한 강의도 있었으면 좋겠습니다. 요즘 왠만한 앱들은 거의 다 보안솔루션을 탑재하고 있고 보안 솔루션들은 지금 과정으로는 진단이 거의 안되고 있습니다. 고급반 강의 가능할까요? 보안 솔루션 적용된 앱 진단방법 무결성 탐지 우회방법 난독화 해제방법 등
SwiftData를 사용해서 TodoList 앱을 만들어보는 중입니다. 강의를 듣기 전에 복습 차원에서 먼저 구현해봤는데, 예상과 다른 동작을 발견했습니다. 처음에는 데이터를 저장하기 위해 modelContext.save() 를 명시적으로 호출해야 할 것이라고 생각했습니다. 그런데 실제로 코드를 작성하고 테스트해보니, .save() 메서드를 호출하지 않아도 데이터가 자동으로 저장되고 있었습니다. SwiftData에서 데이터가 자동으로 저장되는 특정한 시점이나 이벤트가 있나요? import SwiftUI struct TodoDetail: View { @Binding var todo: TodoList @Environment(\.modelContext) private var modelContext var body: some View { VStack { // placeHolder 작성 TextField("할 일을 입력하세요", text: $todo.title) .font(.title2) .padding(10) .overlay( RoundedRectangle(cornerRadius: 10) .stroke(style: StrokeStyle(lineWidth: 1)) ) TextEditor(text: $todo.todoDesc) .padding(10) .overlay( RoundedRectangle(cornerRadius: 10) .stroke(style: StrokeStyle(lineWidth: 1)) ) } .padding() .navigationTitle("할 일을 작성하세요.") .toolbar{ ToolbarItem{ Button("저장") { do { // try modelContext.save() } catch { print("Error Context Save: \(error)") } } } } } } /// 코드 셍략