소개
게시글
질문&답변
프레임워크 선택에 관하여 질문이 있습니다.
답변감사합니다! 다른 프레임워크에 비해 딱히 장점이 더 있는 것 같지도 않다고 하셨는데요, 혹시 위와 같은 경우 더좋은 프레임워크가 있을까요?
- 0
- 3
- 213
질문&답변
DispatchGroup 관련 질문
늦은새벽에도 답글달아주셔서 감사합니다. 답변주신걸 보니 아차싶었네요... 아직도 많이 배워야 하는것 같습니다 ㅠ 제가 잘못알고있는거 같습니다. notify가 leave 메서드가 호출된다면 1. 어떤 클로저 내에 있건 간에 호출이 되는 녀석이라고 생각을 했습니다. 같은 맥락으로 if 클로저 내부에서도 leave 를 만나면 실행이 된다고 생각을 했습니다. 예제 코드를 다시보니 1번이 된다고 착각을 했었네요. 1번이 되는 것이 아니라 testFunc()/true 내부에 start(), notify()가 있어서 notify가 다시 호출될 수 있었던거였네요 ㅠ 당연히 boolean이 false이때는 leave가 호출되어도 notify를 등록(?)하지 않았기에 호출이 안되는 것이였고요... notify()라는 로직흐름만 따라가다보니 정작 중요한 것은 까먹고 있었습니다. 부끄럽네요... 다음에는 질문 올릴때 신중히 올리도록하겠습니다. 이런 질문에도 답변을 달아주시니 너무 감사할따름입니다 ㅠ 좋은 밤되세요!
- 1
- 6
- 234
질문&답변
DispatchGroup 관련 질문
항상친절한 답변 감사드립니다! ㅎㅎ 말씀하신대로 url request를 이용해서 작성을 해봤고, request작업에는 delegate 패턴을 자주사용하니 그것도 함께 작성해봤습니다. View부분은 그대로이고 문제가 되는 파일만 수정해서 올려드립니다. import Foundation let pGroup = DispatchGroup() let pThread = DispatchQueue.init(label: "com.test", qos: .default) class GCDTest{ init() { } //task1 func start(){ pGroup.enter() Req(delegate: self).request() } //task4 func testFunc(boolean: Bool){ print("testFunc") if boolean{ self.start() pGroup.notify(queue: pThread) { print("notify") } }else{ print("else") } } } extension GCDTest: ReqDelegate{ func response() { print("response") //task3 pThread.async { print("pThread async") pGroup.leave() } } } protocol ReqDelegate { func response() } class Req{ var delegate: ReqDelegate! init(delegate: ReqDelegate) { self.delegate = delegate } //task2 func request() { // https://httpbin.org/#/Images/get_image let url: URL = URL(string: "https://httpbin.org/#/Images/get_image")! let request = URLRequest(url: url) let session = URLSession.shared session.dataTask(with: request) { (data, response, error) in if error != nil{ return }else{ self.delegate.response() } }.resume() } } 실행 결과는 처음 시작시에는 (사진) boolean = true 번튼 클릭시 (사진) boolean = false 버튼 클릭시 (사진) 이렇게 출력이 됩니다. 제가 예상했던 Flow는 다음과 같습니다. (사진) 현재 testFunc()메서드의 boolean 값에 따라서 notify가 실행되고 안되는 중입니다. notify()가 leave() 가 호출되고 나면 반드시 실행되어지는 메서드라고 생각을 했는데 위와같은 코드를 보니 혼동이 있습니다. notify()를 감싸고 있는 블럭들(testFunc(), if boolean)에 따라서 notify()가 실행되고 안되고가 결정되고 있는 상황인것같습니다. 이와같은 실행결과가 어떻게 나오는지가 궁금합니다. 감사합니다!
- 1
- 6
- 234
질문&답변
GCD - 7.(심화) Thread-safe한 코드의 구현과 방법 / 2)시리얼큐와 Sync 에서 질문입니다.
감사합니다 ㅎㅎ 강의와 올려주신 코드를 다시한번 보니 이제 정말 완벽하게 이해했습니다 ㅎㅎ 늦은 시간임에도 불구하고 답변달아주셔서 정말 감사합니다. 덕분에 항상 많이 배워갑니다. 즐거운 주말보내세요! :)
- 1
- 7
- 538
질문&답변
GCD - 7.(심화) Thread-safe한 코드의 구현과 방법 / 2)시리얼큐와 Sync 에서 질문입니다.
제가 수정을 눌러서 답변이 꼬인 것 같네요 ㅠ 죄송합니다. 다시 질문을 드리겠습니다 ㅎㅎ 한가지 궁금한건 [읽기 + 읽기 + 쓰기 + 쓰기 + 읽기 + 쓰기] 이런 식으로 뒤죽박죽이 될 가능성이 농후합니다. 라고 답변달아주셨는데 count부분을 async로 접근하지만( DispatchQueue.global().async{ } ) count 자체는 SerialQueue.sync{} 로 되어있기 때문에 순서를 보장할 수 있다라고 저는 이해했는데 틀린 부분이 있을까요? 즉, 다시말해 [task2(읽기 + 쓰기) + task3(읽기 + 쓰기) + task1(읽기 + 쓰기)] 이런식으로 task 자체는 async로 뒤죽박죽이지만 읽기 쓰기 작업은 serialQueue에서 sync로 동작하는 것을 이해하고 있었습니다! 항상 빠르고 친절한 답변 감사합니다!
- 1
- 7
- 538
질문&답변
GCD - 7.(심화) Thread-safe한 코드의 구현과 방법 / 2)시리얼큐와 Sync 에서 질문입니다.
빠르고 친절한 답변 감사합니다! 오랜만에 강의를 들어서 기초부분을 깜빡했는데 다시한번 짚어주셔서 감사합니다 ㅎㅎ 한가지 궁금한건 [읽기 + 읽기 + 쓰기 + 쓰기 + 읽기 + 쓰기] 이런 식으로 뒤죽박죽이 될 가능성이 농후합니다. 라고 답변달아주셨는데 count부분을 async로 접근하지만( DispatchQueue.global().async{ } ) count 자체는 SerialQueue.sync{} 로 되어있기 때문에 순서를 보장할 수 있다라고 저는 이해했는데 틀린 부분이 있을까요? 즉, 다시말해 [task2(읽기 + 쓰기) + task3(읽기 + 쓰기) + task1(읽기 + 쓰기)] 이런식으로 task 자체는 async로 뒤죽박죽이지만 읽기 쓰기 작업은 serialQueue에서 sync로 동작하는 것을 이해하고 있었습니다! 항상 빠르고 친절한 답변 감사합니다!
- 1
- 7
- 538
질문&답변
GCD - 3.디스패치큐(GCD) 사용시 주의해야할 사항 강의에서 질문입니다.
앗 감사합니다 ㅎㅎ 강의를 듣다가 무조건 적으로 데드락이 발생한다고 생각했던 것 같습니다. 자세한 답변 감사합니다 ㅎㅎ 명확히 이해되었어요!
- 2
- 3
- 175